当前位置: 代码迷 >> C语言 >> [讨论]难以驾驭的函数:scanf函数
  详细解决方案

[讨论]难以驾驭的函数:scanf函数

热度:204   发布时间:2007-11-15 23:51:10.0
[讨论]难以驾驭的函数:scanf函数
void main( void )
{
int a;

scanf("%d", &a);
while( 1 )
{
scanf("%d",&a);
}
}

如果第一次输入一个字符或多个字符时,while会如何执行?如果要求输入一个整数实际输入的是字符型的数据时,scanf就象“卡”住一样,由于“吃”不进字符型的数据,而在while循环中又要求不停地输入,因此while中的scanf函数不停地去尝试读取缓冲区已存在的字符,而根本不会停下来等用户再输入。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…………谢谢~~
----------------解决方案--------------------------------------------------------
  相关解决方案