参见英文答案 > Problems when using scanf with %i to capture date (mm dd yyyy)1个
出于某种原因,当我运行我的程序时,它没有给我选择为day1和year2关联的语句键入数字.它为什么这样做?
#include <stdio.h>

int main(void ) {

    int day1,day2,month1,month2,year1,year2;

    printf("Enter date 1 mm\n");
    scanf("%i",&month1);

    printf("Enter date 1 dd\n");
    scanf("%i",&day1);

    printf("Enter date 1 yyyy\n");
    scanf("%i",&year1);

    printf("Enter date 2 mm\n");
    scanf("%i",&month2);

    printf("Enter date 2 dd\n");
    scanf("%i",&day2);

    printf("Enter date 2 yyyy\n");
    scanf("%i",&year2);

    return 0;
}

解决方法

您是否为第一个mm值键入08或09?

如果是这样,那就麻烦了:%i转换规范在十六进制值之前接受0x,在八进制值之前接受0(参见scanf()的POSIX规范).如果键入08或09,则只有零作为八进制有效,因此它在输入中保留8或9,立即读取为day1值.类似地,您可能在第2天输入08或09,并且发生相同的故障,因此day2包含0,而year2包含8或9.

您可以通过以下方式帮助自己和其他所有人:

>检查scanf()调用是否成功.
>打印从程序中输入的值.
>包括正在运行的程序的记录.

例如:

#include <stdio.h>

int main(void ) {

    int day1,&year2);

    printf("%.4d-%.2d-%.2d to %.4d-%.2d-%.2d\n",day1,year2,day2);

    return 0;
}

样品运行:

$./date1
Enter date 1 mm
08
Enter date 1 dd
Enter date 1 yyyy
1999
Enter date 2 mm
12
Enter date 2 dd
09
Enter date 2 yyyy
1999-00-08 to 0009-12-00
$

代码不会检查scanf()调用,但它确实说明了您看到的行为.

固定

如果您希望数字即使是前导零也是十进制数,请使用%d而不是%i.

只有最勤奋的C程序员才能以八进制或十六进制输入日期.

C scanf意外地表现为%i扫描日期的更多相关文章

  1. 使用最新的Flurry SDK和ios4重新启动应用程序

    我真的希望这对我来说只是一个愚蠢的错误.我很高兴使用Flurry但这样的事情会导致我的应用被拒绝.解决方法我写了关于这个的Flurry,他们很快回到我身边,他们会调查这个.大约一个星期后,他们回信并表示他们已经在v2.6中修复了它,现在可用了.我似乎无法重现这个问题.不是说我很棒或者什么,但我还是单枪匹马地解决了这个问题.

  2. 如何在Xcode 4.1中调试OpenCL内核?

    我有一些OpenCL内核没有做他们应该做的事情,我很想在Xcode中调试它们.这可能吗?当我在我的内核中使用printf()时,OpenCL编译器总是给我一大堆错误.解决方法将格式字符串转换为constchar*似乎可以解决此问题.这适用于Lion:这有上述错误:

  3. Swift - 二进制,八进制,十六机制的表示方法

    整数各种进制的字面量如下:十进制数,没有前缀二进制数,前缀是0b八进制数,前缀是0o十六进制数,前缀是0x1234letdecimalInteger=17binaryInteger=0b10001//二进制的17octalInteger=0o21//八进制的17hexadecimalInteger=0x11//十六进制的17

  4. 六种语言实现输出乘法口诀表

    六种语言实现输出乘法口诀表Objective-cC语言javaJavaScriptSwiftPython可以看出不同语言又不同的写法,从上到下,代码越来越少,越来越简洁,也能够看出这些语言的各自的一些特点。

  5. Swift---一门智能型的编程语言

    Swift是苹果公司于2014年推出的一门全新的编程语言,目前已进化至第三版。简单地说,Swift是一门智能型的语言,为程序员解决了在使用很多其他的编程语言的过程中所经常遇到的问题。下面,我就拿Swift和C语言进行对比,用几个例子为大家展示Swift为何是“智能”的。从变量类型的自动推断中也可以看出,Swift具备一定的“智能”。那么,Swift是否受到了大家的欢迎呢?考虑到Swift也才推出来两年,这个排行算是不错的了。

  6. Swift3.0 控制台输入输出

    一个基本事实,scanf是在stdio.h里面的,这是一个标准的c函数。这已经和objective-c没有什么关系了,其实objc里面也没有scanf这个函数。唯一不同的只是objc比swift更容易和c结合。swift从诞生开始的形象就是“去c化”,objc一直沾染着c,而又离现代编程语言太远。其实我从来没有在Cocoa的环境下用过这个函数。Cocoa的定位是让你写GUI,也就是图形用户界面。上面说的都是语言层面的问题,我认为这个问题其实是不存在的。

  7. android – 使用FFmpeg检索专辑封面

    我正在开发一个依赖于FFmpeg来检索音频元数据的Android应用程序.我知道可以使用FFMpeg以编程方式检索专辑封面.但是,一旦您解码了艺术,如何生成图像文件以便在应用程序中使用?

  8. 深入剖析PHP中printf()函数格式化使用

    下面小编就为大家带来一篇深入剖析PHP中printf()函数格式化使用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. 深入理解php printf() 输出格式化的字符串

    下面小编就为大家带来一篇深入理解php printf() 输出格式化的字符串。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码

    这篇文章主要介绍了PHP中的输出echo、print、printf、sprintf、print_r和var_dump的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. 从C到C#的zlib(如何将byte []转换为流并将流转换为byte [])

    我的任务是使用zlib解压缩数据包(已接收),然后使用算法从数据中生成图片好消息是我在C中有代码,但任务是在C#中完成C我正在尝试使用zlib.NET,但所有演示都有该代码进行解压缩(C#)我的问题:我不想在解压缩后保存文件,因为我必须使用C代码中显示的算法.如何将byte[]数组转换为类似于C#zlib代码中的流来解压缩数据然后如何将流转换回字节数组?

  2. 为什么C标准使用不确定的变量未定义?

    垃圾价值存储在哪里,为什么目的?解决方法由于效率原因,C选择不将变量初始化为某些自动值.为了初始化这些数据,必须添加指令.以下是一个例子:产生:虽然这段代码:产生:你可以看到,一个完整的额外的指令用来移动1到x.这对于嵌入式系统来说至关重要.

  3. 如何使用命名管道从c调用WCF方法?

    更新:通过协议here,我无法弄清楚未知的信封记录.我在网上找不到任何例子.原版的:我有以下WCF服务我输出添加5行,所以我知道服务器是否处理了请求与否.我有一个.NET客户端,我曾经测试这一切,一切正常工作预期.现在我想为这个做一个非托管的C客户端.我想出了如何得到管道的名称,并写信给它.我从here下载了协议我可以写信给管道,但我看不懂.每当我尝试读取它,我得到一个ERROR_broKEN_P

  4. “这”是否保证指向C中的对象的开始?

    我想使用fwrite将一个对象写入顺序文件.班级就像当我将一个对象写入文件时.我正在游荡,我可以使用fwrite(this,sizeof(int),2,fo)写入前两个整数.问题是:这是否保证指向对象数据的开始,即使对象的最开始可能存在虚拟表.所以上面的操作是安全的.解决方法这提供了对象的地址,这不一定是第一个成员的地址.唯一的例外是所谓的标准布局类型.从C11标准:(9.2/20)Apointe

  5. c – 编译单元之间共享的全局const对象

    当我声明并初始化一个const对象时.两个cpp文件包含此标头.和当我构建解决方案时,没有链接错误,你会得到什么如果g_Const是一个非const基本类型!PrintInUnit1()和PrintInUnit2()表明在两个编译单元中有两个独立的“g_Const”具有不同的地址,为什么?

  6. 什么是C名称查找在这里? (&amp;GCC对吗?)

    为什么在第三个变体找到func,但是在实例化的时候,原始变体中不合格查找找不到func?解决方法一般规则是,任何不在模板定义上下文中的内容只能通过ADL来获取.换句话说,正常的不合格查找仅在模板定义上下文中执行.因为在定义中间语句时没有声明func,并且func不在与ns::type相关联的命名空间中,所以代码形式不正确.

  7. c – 在输出参数中使用auto

    有没有办法在这种情况下使用auto关键字:当然,不可能知道什么类型的.因此,解决方案应该是以某种方式将它们合并为一个句子.这可用吗?解决方法看起来您希望默认初始化给定函数期望作为参数的类型的对象.您无法使用auto执行此操作,但您可以编写一个特征来提取函数所需的类型,然后使用它来声明您的变量:然后你就像这样使用它:当然,只要你重载函数,这一切都会失败.

  8. 在C中说“推动一切浮动”的确定性方式

    鉴于我更喜欢将程序中的数字保留为int或任何内容,那么使用这些数字的浮点数等效的任意算术最方便的方法是什么?说,我有我想写通过将转换放在解析的运算符树叶中,无需将表达式转化为混乱是否可以使用C风格的宏?应该用新的类和重载操作符完成吗?解决方法这是一个非常复杂的表达.更好地给它一个名字:现在当您使用整数参数调用它时,由于参数的类型为double,因此使用常规的算术转换将参数转换为double用C11lambda……

  9. objective-c – 如何获取未知大小的NSArray的第一个X元素?

    在objectiveC中,我有一个NSArray,我们称之为NSArray*largeArray,我想要获得一个新的NSArray*smallArray,只有第一个x对象…

  10. c – Setprecision是混乱

    我只是想问一下setprecision,因为我有点困惑.这里是代码:其中x=以下:方程的左边是x的值.1.105=1.10应为1.111.115=1.11应为1.121.125=1.12应为1.131.135=1.14是正确的1.145=1.15也正确但如果x是:2.115=2.12是正确的2.125=2.12应为2.13所以为什么在一定的价值是正确的,但有时是错误的?请启发我谢谢解决方法没有理由期望使用浮点系统可以正确地表示您的帖子中的任何常量.因此,一旦将它们存储在一个双变量中,那么你所拥有的确切的一

返回
顶部