打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
fflush(stdin)和rewind(stdin)-清空键盘输入缓冲区

使用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()一直读取输入缓冲区的回车符号,直到读完缓冲区。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c语言输入输出缓冲区的概念_仙剑系列
C语言清空输入缓冲区的N种方法对比 - 龙渊阁 - 博客园
C语言fflush()函数
c语言中fflush(stdin)作用(转)
清空缓冲区
C语言scanf函数详细解释
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服