edh*_*dhu 1 c io scanf getchar
我对scanf和getchar如何处理不同的流感到困惑,以下是示例代码:
while(scanf("%d", &input) != 1)
{
while((ch = getchar()) != '\n')
{
putchar(ch);
}
printf("\nThis is wrong\n");
}
printf("That is right\n");
Run Code Online (Sandbox Code Playgroud)
这是一个简单的程序,用于测试输入是否为整数.内部while循环用于在单击Enter之前显示每个错误的输入值.当我输入一个随机字符串,如:
qwert
Run Code Online (Sandbox Code Playgroud)
putchar将打印出确切的字符串.但是,如果我换了
while(scanf("%d", &input) != 1)
Run Code Online (Sandbox Code Playgroud)
同
while((ch = getchar()) != '\n')
Run Code Online (Sandbox Code Playgroud)
并打印出完全相同的字符串,第一个字母"q"被删除.所以我的问题是外循环中的scanf和getchar如何处理这种情况?
当您scanf尝试读取整数时,如果您输入的某些输入不是整数,scanf则会失败并且不会返回1.然而,它会保持输入完整,它不会从输入中提取任何内容,而是将所有内容循环消化和打印.
如果你getchar在外部循环中使用它,它实际上将消耗一个字符,无论它是什么字符,然后内部循环将不会看到该字符,因为它不再存在于输入缓冲区中.