首页 > 解决方案 > 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

我发了一个新帖子,因为我看到了带有字符的解释,但没有看到整数。

标签: cintegerscanf

解决方案


当您使用%iscanf

scanf("%i",&inp);  //INPUT 09 AS MONTH OR ANYTHING

当输入为 时,由于前缀或前导零,它会将输入读取为八进制,因此 的值变得无效,因为它不是有效的八进制数字,八进制数字为。009inp90,1,2,3,4,5,6,7

在使用 when 的情况下,%d输入09不会转换为八进制,读取的值将是9.

除此之外,我想提出一些建议:远离扫描


推荐阅读