我已经有了这本书“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年......(哇我老了)
答案 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];
}