C 扫描第二次跳过



我已经读过关于在scanf前面放置空格的信息,但我尝试的所有内容都不起作用。我正在尝试读取两组三个整数。第一个扫描工作正常,而第二个则不工作。我很沮丧,因为我尝试了在论坛中看到的所有内容,在前面或换行符中放置空格,但没有任何效果。

有问题的代码:

// Get user input for the two dates:
printf("Enter Date #1 in format mm:dd:yyyy n");
scanf("%i:%i:%in", &D1.month, &D1.day, &D1.year);
printf("Enter Date #2 in format mm:dd:yyyyn");
scanf("%i:%i:%i", &D2.month, &D2.day, &D2.year);

我试图在那里单独放置一个空格和一个换行符,我试图阅读一个虚拟变量字符,看看这是否有效。为什么我不能在第二次扫描中输入任何数据?

输出显示:

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

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

当您将%iscanf一起使用时:

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

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

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

除此之外,我还想建议:远离扫描

正如 user3121023 在注释 (1( 中给出的,Changin 都用"%d"而不是"%i"解决了这个问题。我不清楚为什么。

代码现在为:

// Get user input for the two dates:
printf("Enter Date #1 in format mm:dd:yyyy n");
scanf("%d:%d:%d", &D1.month, &D1.day, &D1.year);
printf("Enter Date #2 in format mm:dd:yyyyn");
scanf("%d:%d:%d", &D2.month, &D2.day, &D2.year);

此外:

"%d:%d:%dn"

行不通。不要在扫描中输入""。

最新更新