[英]Do scanf and getchar handle stream differently?
我对scanf和getchar处理流的方式感到困惑,以下是示例代码:
while(scanf("%d", &input) != 1)
{
while((ch = getchar()) != '\n')
{
putchar(ch);
}
printf("\nThis is wrong\n");
}
printf("That is right\n");
这是一个简单的程序,用于测试输入是否为整数。 内部while循环用于在单击Enter之前显示每个错误的输入值。 当我输入随机字符串时,例如:
qwert
putchar将打印出确切的字符串。 但是,如果我更换了
while(scanf("%d", &input) != 1)
与
while((ch = getchar()) != '\n')
并打印出完全相同的字符串,第一个字母“ q”将被删除。 所以我的问题是外循环中的scanf和getchar如何处理这种情况?
当您使用scanf
尝试读取一个整数,你给一些输入不是整数,则scanf
将失败,并不会返回1
。 但是,它将保持输入不变,不会从输入中提取任何内容,而将所有内容留给您的内部循环来消化和打印。
如果在外部循环中使用getchar
,则无论它是什么字符,它实际上都会消耗一个字符,并且内部循环将看不到该字符,因为它不再存在于输入缓冲区中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.