C 语言新手请教一个关于 EOF 的问题

2021-04-21 23:11:09 +08:00
 Danswerme

代码如下,在第一步getchar里如果输入了 EOF(我用的 macOS,输入了 Ctrl+D),那么循环里 scanf 就一直读不到值陷入死循环,用 rewind 清理掉 EOF 之后就没问题了,为什么第一个循环清理不掉 EOF 呢?

#include <stdio.h>

int main(void)
{
    int ch;
    int num;

    ch = getchar();

    while ((ch = getchar()) != '\n' && ch != EOF)
        ;

    // rewind(stdin);

    while (scanf("%d", &num) != 1 || num < 1 || num > 5)
    {
        printf("%d\n", num);
    }

    printf("Number is %d\n", num);
}
590 次点击
所在节点    问与答
1 条回复
irytu
2021-04-22 00:01:47 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/772306

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX