在C语言中,为什么我的一个 scanf代码在第二次循环操作时,那步骤不执行了呢?

我编了一个程序,其中含一个循环,循环中有一个scanf语句,第一次循环时,scanf执行正常,而在1次循环后,scanf不执行就自动过去了。我用debug单步执行,按理说,后面的一次sacnf必须在黑框停顿让我填写,我按F10才能执行下一步。可是现在是我没输入任何内容,按F10就执行下一步了……怎么办?虚心求指教!

因为scanf输入要按回车,输入一个字符后回车,计算机实际上接收了两个字符,即:字符+回车。
试一下flushall(); or fflush(stdin);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-01
因为scanf输入要按回车,就这么简单。。。你输入的时候按了回车,回车指令还在等待执行,然后下一个scanf的时候就读入了这个回车追问

我在scanf后面用一个char型变量enter吸收了回车,即为enter=getchar();
还是不对啊……

追答

卟。。用getch()试试,因为getchar()也是要按回车的

追问

用getch(),提示我:undeclared identifier…………555……

追答

#include "conio.h"

第2个回答  2011-09-01
char c[10];
for(int i=0;i<10;i++)
scanf("%c",&c[i]);

//如果你代码结构是上面那样的,则输入一人字符后回车,计算机实际上接收了两个字符,即:字符+回车,要将这个多余的回车去除,可以将上面代杩改为下面的形式:
char c[10];
for(int i=0;i<10;i++)
{
flushall(); //清除多余的回车符。
scanf("%c",&c[i]);
}追问

清除所有缓冲区,那么我是不是其他的数据也会消失呢?

追答

不会的。

追问

可是你这样写:
for(int i=0;i<10;i++)
{
flushall(); //清除多余的回车符。
scanf("%c",&c[i]);
}
电脑怎么知道你是清除c[ ]的变量呢?他不是清楚了所有变量信息吗?

追答

flushall();//这个语句是清除键盘缓冲区,不是清除变量。

追问

因为我是有很多个变量数据的,比如i,j,k……,如果我flushall后,那么这些变量以前赋的值不就是清空了吗?没了吗?

追答

不会。
如果你会调试程序的话,你可以测试下,增加理解。

本回答被提问者和网友采纳
第3个回答  2011-09-01
呵呵,这是scanf的规则!
按理来说你每输入一个数 末尾都要加一个空格才能完成一次输入!

建议不要图方便在scanf在加上了一些规则!
这样会变得很麻烦,
可以通过与printf相结合的方式!
第4个回答  2011-09-01
scanf后面 加一个getchar追问

嗯嗯,加了,还是不对……

相似回答