1
我感到困惑如何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");
它是用于测试是否输入是整数一个简单的程序。内部while循环用于在单击Enter之前显示每个错误的输入值。当我输入一个随机字符串如:
qwert
putchar将打印出确切的字符串。但是,如果我换成
while(scanf("%d", &input) != 1)
与
while((ch = getchar()) != '\n')
,并打印出完全相同的字符串,第一个字母“Q”被退学了。 所以我的问题是如何scanf和getchar在外部循环处理这种情况不同?
外环中的'getchar'吃掉了'q'。在内部循环之前添加'putchar(ch)'来解决问题。另一方面,对于无效输入(例如字符),'scanf(“%d”)'将失败,并返回0,并将字符(无效输入)留在stdin中。 –