您的位置:首页 > 其它

scanf这句时,系统并不是等待用户输入

2013-10-31 12:42 190 查看
#include <stdio.h>
#define BUG puts("here");
int main() {
setbuf(stdin, NULL);
char a, b;
while (scanf("%c%c", &a, &b) == 2) {
printf("%c\n", a);
BUG
printf("%c\n", b);
setbuf(stdin, NULL);
}
return 0;
}


当我们的pc指向scanf这句时,系统并不是等待用户输入,而是判断输入缓冲区有没有符合格式的内容,如果有,则直接读取。

知道了这个,我就应该明白,scanf("%c",&ch);不是没有读到数据,而是读到了我们不知道的数据。

那问题又来了,它读到了什么??好吧,这就要说到行缓存;

我们用scanf()的时候都要按下enter键,那enter键按了之后去哪儿了??

好吧,问题基本应该知道了,enter键也进入了输入缓存区,也就是scanf("%c",&ch);

读到了'\n';

解决办法,很简单,既然缓存区有东西,那我们就清空它呗~~

setbuf(stdin,NULL);(这个windows和linux下都可以)

fflush(stdin);(这个只能windows);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐