我一直以为“缓冲区中的‘\n’”问题只会在读取字符时出现,
然而,我在以下代码中遇到了这个问题:
int main(int argc, char** argv){
int height = 0, width = 0;
while(height < 1 || height > 10|| width < 1 || width > 15){
printf("Please insert the height(1~10) and width(1~15) of the parallelogram (integers): ");
if(scanf("%d %d", &height, &width) != 2){
height = width = 0;
}
}
return 0;
}
如上所述,我只使用scanf读取整数,但是当我输入无效内容时,这段代码仍然会陷入无限循环。 如果我清理缓冲区,问题就解决了。
所以我的问题是,这个“缓冲区中存在'\n'”的问题是普遍存在的吗? 还是只发生在特殊情况下?如果它只发生在特殊情况下,是否有一些一般性的指导方针需要遵循?
scanf
没有返回2
,则需要清除缓冲区。这时,缓冲区中有一些内容无法被解释为一个整数,比如一个字母。空格(以及开头的换行符)将会被忽略。 - mchstdin
和scanf
中,发现它们失败,重复... FYI,%d
会跳过前导空格字符。 - Spikatrix