我希望能更好地理解这个命令的背后原理。
一开始,我试图防止我的应用在scanf()
接收到char
而不是期望的int
时失败。提供给我的解决方案是添加一行代码while (getchar() != '\n');
以清除输入缓冲区。并且它奏效了,太棒了!
但由于我使用的是scanf()
而不是getchar()
,所以我觉得有点困惑,因为我需要使用完全不同的命令来清除缓冲区。
我已经谷歌了一下,从我所了解的情况来看,getchar()
使用的是stdin
,这就是使用该命令清除缓冲区的缓冲区。这也意味着,在这种情况下,scanf()
也在使用stdin
。
这个假设是正确的吗?
while(getchar() != '\n');
并不是很好的做法,因为如果出现文件末尾(例如用户按Ctrl-D或被重定向到stdin的文件已结束)或其他错误,它将无限循环(getchar()
永远返回EOF
,并且您的循环永远不会结束)。通常你需要像这样写int ch; while((ch = getchar()) != EOF && ch != '\n');
。 - Matteo Italiascanf("%*[^\n]"); scanf("%*c");
。 - Spikatrixscanf()
进行用户输入。 - pmg