在每次scanf 或getchar后加上一个fflush来清理输入缓冲区是不是一个好的代码习惯?

【在每次scanf 或getchar后加上一个fflush来清理输入缓冲区是不是一个好的代码习惯?】 fflush只是用于立刻输出缓冲区内容的,它并不会抛弃缓冲区内容,所以用fflush来清理输入缓冲区本身是错误的。一部分库支持用fflush(stdin)来清理输入缓冲区,不过这个并不是标准。
考虑这样的情况:
char c1, c2;printf("Char 1: ");scanf("%c", \u0026amp;c1);printf("Char 2: ");c2 = getchar();printf("Char 1 = %c, Char 2 = %c", c1 , c2);输入第一个字符并敲下回车之后,字符被写入c1,回车字符(\u0026#39;\\u0026#39;)会被写入输入缓冲区之后被getchar()接收。也就是说上面的代码里,getchar()这句话是不会等待用户输入第二个字符的。
一种比较通用的方案是:
while((c = getchar()) != \u0026#39;\\u0026#39; \u0026amp;\u0026amp; c != EOF)\t\t/* discard */ ;
■网友
你要做的是使自己的脑子清楚地知道缓冲区里会有啥、该怎么处理,而不是用这个ub操作来把缓冲区的屁屁擦干净。

■网友
如果你要实现频繁读写,那还是不要每次都刷新吧。对机械硬盘伤害大
■网友
不是
■网友
这种情况可以通用写法
while (getchar() != \u0026#39;\\u0026#39;)
continue;

■网友
没用过fflush
(P.S.回车相当于强制输出)


    推荐阅读