【发布时间】:2016-06-14 21:32:03
【问题描述】:
我对 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 如何以不同的方式处理这种情况?
【问题讨论】:
-
getchar在外部循环中吃掉了q。在内部循环之前添加putchar(ch)以解决问题。另一方面,scanf("%d")对无效输入(例如字符)将失败并返回 0,将字符(无效输入)留在stdin本身中。