【问题标题】:Getting input in the if condition在 if 条件下获取输入
【发布时间】:2011-07-15 01:12:50
【问题描述】:
#include <stdio.h>

// copy input to output
// my version

int main()
{
    int c;

    printf("\n\nUse CONTROL + D to terminate this program\n\n");

    while ((c = getchar()) != EOF) {
        putchar(c);
    }

    if ((c = getchar()) == EOF) {
        printf("\n\nProgram TERMINATED\n\n");
    }

    return 0;
}

当我输入 control + D 时,if 语句的主体运行。这就是我想要的,但是当我更彻底地分析代码时,由于if 的条件是(c = getchar()) == EOF,它不应该再次要求我输入吗?

【问题讨论】:

  • 为什么是int 而不是char
  • @alex: 因为getchar 返回一个int(实际上是一个unsigned char 转换为int,或EOF - 根据定义,它是一个负数)。

标签: c


【解决方案1】:

当您点击^D 时,程序的输入被关闭,因此getchar() 随后将始终返回EOF

【讨论】:

  • 如果在^D 之后每次调用getchar() 都不起作用,我该如何再次获得输入?
  • 使用^D 以外的其他内容(以及随后的文件结尾)来终止您的输入。
【解决方案2】:

Control-D 是规范模式的文件结束符。当在行首输入时,它会导致进程看到 EOF 条件,即读取返回 0。但是,如果在行首以外的其他位置输入 Control-D它只会导致读取立即返回迄今为止输入的内容。

如果您连续按两次 Control-D,您应该会看到我认为您在问什么。

编辑

Here 是一个很好的解释。

【讨论】:

    【解决方案3】:

    ^D 立即终止程序。因此,当 ^D 被击中时,您的 getchar 将永远不会返回。

    这就是为什么 REPL 之类的 python 使用 'exit()' 退出的原因。

    如果需要,请尝试使用 'q' 退出:

    【讨论】:

    • 这可以更好地表达 - ^D 通常不会终止程序,只是它们的输入。该程序可以随意忽略缺乏输入并继续其快乐的方式。
    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 2013-06-14
    • 2020-06-21
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    相关资源
    最近更新 更多