我应该从“C程序设计语言”第2版(1991年)中得到什么。内部解释示例

时间:2011-06-27 07:48:57

标签: c

我已经有了这本书“The C Programming Language Second Edition”(西班牙语版)几年了,我最近决定给它一个机会。这将是我的第一个编程语言,是的,我知道这对于初学者来说并不容易,我喜欢挑战。 幸运的是,我找到了一个不正常的例子(见下文)

以下代码应该在每次修改nc时计算并显示计数。事情是printf实际上没有打印任何东西。将EOF更改为1并键入它也不会结束该程序。

#include <stdio.h>
main()
{
      long nc;
      nc = 0;
      while(getchar() != EOF)
            ++nc;
            printf("%ld\n", nc);
}

问题:我应该知道C中的任何“最近”变化吗?。这本书是1991年,20年......(哇我老了)

3 个答案:

答案 0 :(得分:2)

如果你想在每次迭代后打印,你必须用括号括起来。

  while(getchar() != EOF)
  {
        ++nc;
        printf("%ld\n", nc);
  }

如果你想“破解”while(发送EOF),你需要CTRL-D或CTRL-Z。

无论如何,如果书没有指定括号,请将其缩进:

  while(getchar() != EOF)
        ++nc;
  printf("%ld\n", nc);

答案 1 :(得分:1)

您可能需要添加一些支架:

while(getchar() != EOF) {
    ++nc;
    printf("%ld\n", nc);
}

每次输入一个字符时,都会打印出nc的值。

答案 2 :(得分:0)

cnictuar's suggestion正是我的英文平装版第17版打印中的代码片段。也许缩进在西班牙语翻译中搞砸了,但改变它感觉很有趣。

有很多new features in C99,但我真正高兴的是:

  • 命名的初始值设定项:

    struct {int a, b, c, d;} s =
    { .a = 1, .c = 3, 4, .b = 5};
    
  • for循环中的声明:

    for (int i; i<foo; i++) { ... }
    
  • 自动聚合的初始化程序可以是非常量表达式:

    void foo(int n) {
        int arr[n];
    }