c语言的死循环问题
下面程序不加缓存清除函数 fflush(stdin);则是死循环,为什么?怎么修改?请教
#include "stdio.h"
main()
{
int n,a,b;
n=scanf("%d%d",&a,&b);
while(n!=2)
{
printf("error!input again:\n");
n=scanf("%d%d",&a,&b);
}
printf("%d%d",a,b);
}
[解决办法]
scanf()函数返回成功赋值的数据项数,读到文件末尾出错时则返回EOF。
如: scanf("%d%d", &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。
且返回值为int型.
[解决办法]
fflush(stdin);是为了清空一下缓存区的东西,否则scanf会去读取缓冲区中的东西,造成死循环
[解决办法]
- C/C++ code
#include <stdio.h>void main() { int n,a,b; char c; while (1) { printf("\nInput two number(for example:1 2):"); fflush(stdout); rewind(stdin); n=scanf("%d%d%c",&a,&b,&c); if (EOF==n) return; if (3==n && '\n'==c) break; } printf("%d %d\n",a,b);}Input two number(for example:1 2):1,2Input two number(for example:1 2):a,bInput two number(for example:1 2):123aInput two number(for example:1 2):1 2cInput two number(for example:1 2):1 21 2
[解决办法]
比如输入 1 a然后回车,则缓冲区有下面字符:【1, a ,回车】
n=scanf("%d%d",&a,&b);
变量a读到1,缓冲区有 【a, 回车】
变量b读到a,不符合%d的规则所有语句返回则n=1,此时缓冲区还是 【a, 回车】
由于n=1进去循环,打印了出错语句,又到了n=scanf("%d%d",&a,&b);
缓冲区有数据,并且第一个数据a不是空格回车等%d可以忽略的,所以scanf直接返回0,则n=0,死循环