繁体   English   中英

scanf和getchar处理流是否不同?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM