{
int a;
scanf("%d", &a);
while( 1 )
{
scanf("%d",&a);
}
}
如果第一次输入一个字符或多个字符时,while会如何执行?如果要求输入一个整数实际输入的是字符型的数据时,scanf就象“卡”住一样,由于“吃”不进字符型的数据,而在while循环中又要求不停地输入,因此while中的scanf函数不停地去尝试读取缓冲区已存在的字符,而根本不会停下来等用户再输入。scanf读取缓冲区中剩余的数据有时候会带来一些麻烦,有没有什么函数可以清除缓冲区中剩余的数据呢?
----------------解决方案--------------------------------------------------------
if(scanf("%d", &a) != 1)
while(getchar() != '\n'); // 丢弃缓冲区字符
//------------------------------------------------------------------------------
#include <stdio.h>
int main(void)
{
int a;
while(scanf("%d", &a) != 1) // 如果没有成功读入一个整数
while(getchar() != '\n'); // 丢弃缓冲区字符
return 0;
}
//------------------------------------------------------------------------------
#include <stdio.h>
int main(void)
{
int a;
while(scanf("%d", &a) != 1) // 如果没有成功读入一个整数
while(getchar() != '\n'); // 丢弃缓冲区字符
while(getchar() != '\n'); // 输入成功至少也会剩余下一个回车字符
printf("%d", a);
getchar();
return 0;
}
[此贴子已经被作者于2007-11-16 1:22:07编辑过]
----------------解决方案--------------------------------------------------------
要是有个什么函数:
[CODE]void clearbuf(){
while(getchar() != '\n');
}[/CODE]
就好了……
----------------解决方案--------------------------------------------------------
要加上using namespace std;才能用cin和cout?
----------------解决方案--------------------------------------------------------
fflush(stdin)
可清除缓冲区中的内容。
----------------解决方案--------------------------------------------------------
谢谢5楼。
----------------解决方案--------------------------------------------------------
fflush…………谢谢~~
----------------解决方案--------------------------------------------------------