【问题标题】:Receiving no errors but not seeing an output没有收到错误但没有看到输出
【发布时间】:2021-01-05 16:04:07
【问题描述】:

我目前正在从 C 编程语言的模拟副本中学习 C。虽然它有助于理解编程的基本方面,但我无法理解直接从教科书中的示例复制的程序如何没有在终端中产生输出,也没有明确地请求输入。我认为我对正在发生的事情的理解存在一个巨大的漏洞。

目前我在第 1.6 节中讨论数组。下面是示例代码:

#include <stdio.h>

int main()

{
    int c, i, nwhite, nother;
    int ndigit[10];

    nwhite = nother = 0;
    for (i = 0; i < 10; ++i)
        ndigit[i] = 0;

    while ((c = getchar()) != EOF)
        if (c >= '0' && c <= '9')
            ++ndigit[c-'0'];
        else if (c == ' ' || c == '\n' || c == '\t')
            ++nwhite;
        else 
            ++nother;

    printf("digits =");
    for (i = 0; i < 10; ++i)
        printf(" %d", ndigit[i]);
    printf(", white space = %d, other = %d\n", nwhite, nother);

 }

由于是C89,正文中没有包含int之前的int,这是我添加的。它没有吐出任何错误,但在我编译后它也没有吐出任何其他东西。我错过了什么?

【问题讨论】:

  • 您是在运行程序,还是只编译它?要构建和运行 C 程序,您需要分多个步骤进行: 1) 编辑源代码; 2)将源代码编译成可执行程序; 3) 运行程序。
  • 我也有点想知道你是否知道如何用键盘发送 EOF。
  • @Blindy 他用教科书做。当然,教科书提到了如何发送EOF
  • 您需要键入一些键,按Enter,然后键入组合键Ctrl-D (Linux) 或Ctrl-Z (Windows),可能还有另一个Enter。此外,除非您从控制台运行程序,否则您可能根本看不到任何输出(它会先关闭)。
  • Leevee,你的意见是什么?你是如何产生文件结束信号的?

标签: arrays c compiler-errors


【解决方案1】:

我刚刚测试了代码,它确实有效。

我想确保您正在运行已编译的文件。编译完以 .c 结尾的代码文件后,会有一个可执行文件,你必须运行它才能使编译后的程序真正执行。

如果您正在运行已编译的文件,那么我认为您遇到的问题是程序一直尝试获取字符,直到它读取 EOF(文件结尾)。 “while ((c = getchar()) != EOF)”这一行完成了两件事。首先,它从标准输入中获取一个字符,并将其存储在变量“c”中。其次,它仅在变量“c”包含 EOF 时才跳出循环。如果程序从不从标准输入读取 EOF,则永远不会到达 while 循环下方的打印语句。如果您的输入来自终端(这是标准输入的默认设置),您需要通过按 Ctrl-D(如果您使用 Linux 或 Unix)或 Ctrl-Z(如果您使用正在使用 Windows)。

我注意到您说该程序不是“明确要求输入”。该程序在调用“getchar()”之前没有任何打印语句。当这个程序运行时,它不会给出太多期待输入的指示,因为没有代码可以将文本打印到终端请求输入。运行代码后,尝试只输入输入并在每次输入后按“输入”键。

【讨论】:

  • 啊哈!非常感谢您花时间解释它在做什么。我听从了你的指示,当我的终端在按下 Ctrl-D 后完全关闭时,我承认有点恼火,但果然找到了可执行文件并且它工作了!非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
相关资源
最近更新 更多