【发布时间】:2012-08-20 11:00:14
【问题描述】:
我的问题很简单:“为什么我在第 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。我想唯一合乎逻辑的解释是它的行为与我的意图完全相反(它 only 计算换行符?)。事实证明,如果我输入单词two 并按回车键,比如说4 次,它会打印出4。对于输入的每个换行符,它似乎都在计算nc,但是如果我单独按回车(在本例中为 4 次)然后按 EOF,它总是打印0。经过进一步的实验,在某些人看来,看不见的 4 可能是这个程序的一个神奇数字。如果我启动它并准确地按回车键(一个可被 4 整除的数字)然后 EOF 打印0。但是,如果我按其他次数输入,EOF 什么也不做,我必须输入^Z 两行,一个接一个,才能正确结束while 循环,并打印1。这让我大吃一惊!
【问题讨论】:
标签: c increment getchar kernighan-and-ritchie