C scanf第二次跳过

时间:2018-09-30 21:17:57

标签: c integer 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

我发表了一篇新文章,因为我看到了有关字符而不是整数的解释。

3 个答案:

答案 0 :(得分:3)

%iscanf一起使用时:

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

由于输入为0,前缀为09的输入将以八进制的形式读取,因此inp的值自{{ 1}}是无效的八进制数字,八进制数字为9

与使用0,1,2,3,4,5,6,7时相比,%d的输入不会转换为八进制,读取的值为09

除此之外,我还建议:away-from-scanf

答案 1 :(得分:2)

如user3121023在注释(1)中所述,将两者都更改为“%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:yyyy\n");
scanf("%d:%d:%d", &D2.month, &D2.day, &D2.year);

答案 2 :(得分:2)

此外:

"%d:%d:%d\n"

不起作用。不要在您的scanf中输入'\ n'。