c - C scanf第二次跳过
问题描述
我已经阅读了有关在 scanf 前面放置空格的信息,但我尝试的一切都不起作用。我正在尝试读取两组三个整数。第一个 scanf 工作正常,而第二个没有。我很沮丧,因为我尝试了在论坛中看到的所有内容,在前面放置空格或换行符,但没有任何效果。
有问题的代码:
// Get user input for the two dates:
printf("Enter Date #1 in format mm:dd:yyyy \n");
scanf("%i:%i:%i\n", &D1.month, &D1.day, &D1.year);
printf("Enter Date #2 in format mm:dd:yyyy\n");
scanf("%i:%i:%i", &D2.month, &D2.day, &D2.year);
我尝试在其中分别放置一个空格和一个换行符,然后一起尝试读取一个虚拟变量字符以查看是否可行。为什么我不能在第二个scanf中输入任何数据?
输出显示:
Enter Date #1 in format mm:dd:yyyy
09:06:1995
Enter Date #2 in format mm:dd:yyyy
The number of days between 0:1529117256:94769206 and 9:6:1995 is -1783102426
我发了一个新帖子,因为我看到了带有字符的解释,但没有看到整数。
解决方案
当您使用%i
时scanf
:
scanf("%i",&inp); //INPUT 09 AS MONTH OR ANYTHING
当输入为 时,由于前缀或前导零,它会将输入读取为八进制,因此 的值变得无效,因为它不是有效的八进制数字,八进制数字为。0
09
inp
9
0,1,2,3,4,5,6,7
在使用 when 的情况下,%d
输入09
不会转换为八进制,读取的值将是9
.
除此之外,我想提出一些建议:远离扫描
推荐阅读
- xamarin - 旋转滑动时停止并重置视频 - Xamarin.forms
- angularjs - AngularJS Material ng-input-container 重置时间
- java - 使用 SQLite 在 Java 中使用数据库时出错
- python - 使用线性方程创建径向插值圆
- spring-security - Spring security oauth2登录和资源服务器在同一个应用程序中
- python - Django 测试 - 当我运行 classB(它是 classA 的子类)时,classA 中的测试失败
- typo3-9.x - TYPO3 - 如果存储超出根页面导致错误“请求的页面不存在”,则 tx_news 说出 URL 路由
- python - 基于硒的python函数在托管时在本地正确失败?
- string - VHDL:将循环变量转换为字符串并传递给 GENERIC
- neo4j - Neo4j Cypher - 如何使用公共节点显示某种类型的所有节点的图形?