在简单的程序中学习C时,经常会发生计算机跳过某些代码行的执行的情况,而我不明白为什么会这样。
现在作为示例,我草绘了一个程序,该程序仅存储用户输入的3个数字:
#include <stdio.h>
int main(void)
{
int a, b, c;
printf("Please type in number a: \n");
scanf("%i", &a);
printf("Please type in number c: \n");
scanf("%i", &c);
printf("Please type in number b: \n");
scanf("%i", &b);
return 0;
}
我想输入1、2和3。这是我在控制台中得到的(在Ubuntu中):
Please type in number a:
1
Please type in number b:
Please type in number c:
2
数字b的输入被忽略。
不仅第二个输入被跳过,所以即使输入的顺序也不正确。最初,我按字母顺序在代码中编写了所有内容-a,b和c,然后跳过了b的输入,然后更改了代码中的顺序,但仍然可以看到,执行保持不变。
我以前有过这样的情况。
为什么会这样呢?
最佳答案
第二个想法,我认为OP还有另一个问题
留在下面作为社区Wiki作为参考
为了确保在scanf()
之前发生输出,请刷新输出。
printf("Please type in number a: \n");
fflush(stdout);
scanf("%i", &a);
printf("Please type in number c: \n");
fflush(stdout);
scanf("%i", &c);
见What are the rules of automatic flushing stdout buffer in C?