【发布时间】:2015-04-20 11:23:34
【问题描述】:
当我准确键入 K&R 中的某些示例时,它们在 Code:Blocks 中不起作用。 比如这个程序:
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
当我输入这段代码并运行它时,当我按下回车键时,程序要么冻结,要么不执行任何操作。
下面的程序做同样的事情(计算字符串中的字符)并且它可以工作。
#include <stdio.h>
int main()
{
char s[1000];
int i;
scanf("%s",s);
for(i=0; s[i]!='\0'; ++i);
printf("Length of string: %d",i);
return 0;
}
我在这里遗漏了什么吗?自 K&R 第 2 版以来 C 是否已更改,还是我做错了什么?
【问题讨论】:
-
您需要按 CTRL+D (Unix) 或 CTRL+Z (Windows) 才能接收
EOF,看看End-of-file -
那行得通。谢谢,我怎么也想不到。
-
除此之外,自 K&R 以来,C 已经发生了很大变化。你不应该读那本书来学习语言,我建议你找一些现代和最新的东西。例如,此代码在 C99/C11 编译器上无法编译,因为 main() 的声明不正确。
-
你有什么推荐的? C Primer Plus by Stephen Prata好吗?
-
@Lundin 今天 K&R 中的哪些材料不正确?它仍然是我所知道的对 ISO 9899 的最佳描述之一。