我的问题只是“为什么我在第 10 行和第 11 行的代码不能正常运行?” 我的代码的预期目的是完全按照原始 K&R 代码的意图执行,但不计算 nc 任何时候 (getchar() == '\n') 请您赐教?
稍作修改的 K&R 代码:
/** K&R - 1.5.2 Character Counting **/
#include <stdio.h>
/* count characters in input; 1st version */
main(){
long nc;
nc = 0;
while (getchar() != EOF){
if (getchar() != '\n'){
++nc;
}
}
printf("%ld\n", nc);
}
我使用 64 位 Windows 7、CodeBlocks10.05、GNU GCC 编译器。
我目前的进展和理解:
在示例运行中,我输入单词two
并按 Enter,这等于 4 个输入,然后按 ctrl+Z 输入一个^Z
或 EOF 字符。然后程序打印1
. 我期待它打印3
。我想唯一合乎逻辑的解释是它的行为与我的意图完全相反(它只计算换行符?)。事实证明,如果我输入单词two
并按回车键,让我们说 4 次,它会打印4
. 它似乎在计算nc
输入的每个换行符,但是如果我单独按 Enter(在这种情况下为 4 次)然后按 EOF,它总是会打印0
. 经过进一步的实验,在某些人看来,看不见的 4 可能是这个程序的一个神奇数字。如果我启动它并准确地按回车键(一个可被 4 整除的数字)然后 EOF 它会打印0
. 但是,如果我按其他次数输入,EOF 什么都不做,我必须输入^Z
两行,一个接一个,才能正确结束 while 循环,然后打印1
。这让我大吃一惊!