【问题标题】:Very basic example code of "The C Programming Language" doesn't work like expected?“C 编程语言”的非常基本的示例代码不能像预期的那样工作?
【发布时间】:2012-01-09 01:26:22
【问题描述】:

我是一名中级经验的 Java 开发人员,在学习计算机科学的 C 语言方面有很多问题。我尝试使用许多人似乎推荐的“The C Programming Language”一书。

但是我遇到了将 EOF 与 getchar() 结合使用等最简单的东西的问题。代码如下:

#include<stdio.h>
main()
{
    int i = 0;
    while (getchar() != EOF)
    {
        ++i;
        printf("Count of characters is %d", i);
    }
}

我正在使用 Mac OS X Lion 并使用带有“./a.out”的“cc”命令在终端中运行,就像书中描述的那样运行文件。而我得到的是:

  • 总是计算一个字符太多
  • while 循环永远不会结束!它只是在到达输入结束后等待另一个输入...

我真的不知道可能是什么问题。有人可以帮忙吗?

【问题讨论】:

  • 尝试通过重定向标准输入以文件作为输入(不是终端)运行程序。并学习如何使用调试器。始终在启用警告的情况下编译,例如gcc -Wall -g yourprog.c -o yourbin
  • 在 Linux 上要结束终端输入,你必须键入 CTRL+d,在 Windows 上 CTRL+z,在 Mac 上我不知道,但我想它可能像 Linux,基于 Unix。
  • 你是如何声明和初始化i的?就像 basile 所说,重定向标准输入。并且您需要将\n 添加到该字符串的末尾。
  • 重定向标准输入?对不起,但我真的很陌生,不知道你的意思。编译器属性也是如此:你为什么使用 gcc 而不是书中的 cc?有什么不同? bin 文件在哪里?是 a.out 吗?
  • 在 OS X 上,ccgcc。这本书写成时(取决于版本?),gcc 并不存在。

标签: c eof kernighan-and-ritchie


【解决方案1】:

当你输入一个字符,例如“6”,然后你点击回车(等于\n),那么命令“6\n”被发送,所以它是2个字符。如果你只是按回车,那么'i'会加1。

EOF 表示文件结束,相当于 ctrld+D。如果您阅读文本文件,这很有用。否则就等于说“永远”。

【讨论】:

    【解决方案2】:

    总是计算一个字符太多

    这可能是换行符(输入/返回)。

    while 循环永远不会结束!它只是等待另一个输入之后 到达输入结束

    您可能不会发出输入结束信号。您应该使用CTRL-D 来执行此操作。

    【讨论】:

    • 谢谢,知道了!所以终端不是用返回而是用CTRL-D?那么一切都会有意义......
    • @user1035741 在 Unix 上是 Ctrl-D。在 DOS 上是Ctrl-Z。管道输入(echo "This is the end" | ./a.out./a.out &lt; file)也将发送工作。
    猜你喜欢
    • 2021-07-14
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2018-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    相关资源
    最近更新 更多