使用scanf输入时,经常出现不能继续输入的问题,原因在于scanf的机制,它从来都是从输入缓冲区内读取数据,而不是从键盘!标准输入是从键盘输入到输入缓冲区中。当第一次调用scanf后,除了输入了正确的数据外,我们还输入了回车符,下一次调用scanf,会读取输入缓冲区内的回车符,而不会理睬你从键盘输入的数据(通常输入字符的话,你也输不了,它认为你输过了),所以错误。
例如
#include<stdio.h>
int main( void )
{
int i;
for (;;) {
fputs("Please input an integer: ", stdout);
scanf("%d", &i);
printf("%d\n", i);
}
return 0;
}
解决方法:在scanf语句后加fflush(stdin)或rewind(stdin)。
网上有些解说这样用是错误的,存在移植性问题,本人没有深究了,管它呢,先解决这个再说吧。
补充(20111115):这个确实存在移植性问题,用gcc不能通过,推荐一种最保险的方法
char m;
while((m=getchar())=='\n'&&m!=EOF);
用getchar()一直读取输入缓冲区的回车符号,直到读完缓冲区。
联系客服