C scanf意外地表现为%i扫描日期
发布时间:2020-12-16 03:25:29 所属栏目:百科 来源:网络整理
导读:参见英文答案 Problems when using scanf with %i to capture date (mm dd yyyy)1个 出于某种原因,当我运行我的程序时,它没有给我选择为day1和year2关联的语句键入数字.它为什么这样做? #include stdio.hint main(void ) { int day1,day2,month1,month2,yea
参见英文答案 >
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 mmn"); scanf("%i",&month1); printf("Enter date 1 ddn"); scanf("%i",&day1); printf("Enter date 1 yyyyn"); scanf("%i",&year1); printf("Enter date 2 mmn"); scanf("%i",&month2); printf("Enter date 2 ddn"); scanf("%i",&day2); printf("Enter date 2 yyyyn"); scanf("%i",&year2); return 0; } 解决方法
您是否为第一个mm值键入08或09?
如果是这样,那就麻烦了:%i转换规范在十六进制值之前接受0x,在八进制值之前接受0(参见 您可以通过以下方式帮助自己和其他所有人: >检查scanf()调用是否成功. 例如: #include <stdio.h> int main(void ) { int day1,&year2); printf("%.4d-%.2d-%.2d to %.4d-%.2d-%.2dn",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程序员才能以八进制或十六进制输入日期. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |