SCANF函数的问题~~~~~

来源:百度知道 编辑:UC知道 时间:2024/09/28 14:27:41
char a;
scanf("%c",&a);/*假如说输入a*/
for(;;)
{
printf("11\n");
scanf("%c",&a);/*这个就用不到了,再加一个SCANF就可以正常输入*/
if (a == 'a')
{
printf("12\n");
}
else
{
printf("%c",a);
break;
}
}
tell me why~~~~~~~~~~~~~~~~~~~~~~~
i don not understant~~~~~~~~~~
难道SCANF()不能将数据抹除后再输入?哪用什么函数将数据抹除???

你没有正确理解scanf的实现方式,
scanf并不是像直观上所理解的直接接收用户的当前输入作为所读取的数据,
scanf实际上是读取的当前键盘缓冲区内的数据,来作为当前的输入。

所以如果当前键盘缓冲区不为空的话,scanf并不会读取当前的客户输入。
在你的这段代码中,scanf就是将键盘缓冲区中所残留的你上一次输入的回车,作为本次输入读入了。

要实现你的要求,可以在scanf前先进行一下键盘缓冲区的强制清空处理:
fflush(stdin);

代码这么写:
char a;
scanf("%c",&a);/*假如说输入a*/
for(;;)
{
printf("11\n");
fflush(stdin);//强制清空键盘缓冲区
scanf("%c",&a);
if (a == 'a')
{
printf("12\n");
}
else
{
printf("%c",a);
break;
}
}

有些编译器提供fflush()函数