问题描述
我有以下来自 The C Programming Language 的代码,它返回输入的字符数
#include <stdio.h>
/* count characters in input; 1st version */
main() {
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n",nc);
}
但是,当我在 Windows 的命令提示符下执行我的程序 (charcounter.exe) 并输入一个字符序列时,程序会再打印一个。就像下面的例子
C:\...\c-folder>charcounter
abc
^Z
4
为什么会这样?我想可能是因为我按下了 ENTER,但是当我尝试输入整个序列,然后是 Ctrl + Z,然后是 ENTER 时,程序不会读取 EOF 字符并继续等待另一个。
C:\Users\juani\Desktop\c-folder>charcounter
abc^Z
^Z
4
解决方法
总结一下 Ctrl-Z
仅在行首时表现为 EOF
,如果它在其他地方,则该行中从 ^Z
开始的所有字符都将被忽略,其中包括 \n
,例如,对于 abcd
ctrl-zasd
Enter 的输入,只有 4 个字符计入该行。
剩下的就是你所说的,\n
也是一个字符,所以它被计算在内,如果这是一个选项,你总是可以用条件排除它:
int main()
{
long nc;
nc = 0;
int c;
while ((c = getchar()) != EOF)
if (c != '\n')
++nc;
printf("%ld\n",nc);
}