我正在使用我创建的宏来清除scanf后的缓冲区,但我被告知这不是一个好主意,因为“很多原因”。你能解释一下为什么以及如何清理它?我知道使用fflush(stdin)是一个非常糟糕的主意,因为它没有被定义。使用C中的宏清除缓冲区是不是一个好主意?
这是我用的宏:
#define CLEAR_BUFFER do { c = getchar(); } while (c != '\n' && c != EOF);
而且也,另一个问题:在“现实世界”中使用scanf函数?如果是的话,人们如何清理缓冲区?
感谢
如果您在阅读某些内容后遇到空格或换行符问题,可以在'%d','%f'或类似内容之前放置一个空格,例如, 'scanf(“%d”,x)' – humodz 2014-11-22 13:24:59
对于用户输入,使用'fgets()'来获取数据并很好地处理线路缓冲输入流。 – pmg 2014-11-22 13:32:42
@ pmg为健壮的代码,fgets也需要清理,因为行可能会超过缓冲区大小 – 2014-11-22 14:00:14