为什么 getchar 正在读取一个值?
Why getchar is reading one more value?
我从 The C Programming Language 中获得了以下代码,return 键入的字符数
#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);
}
我从 The C Programming Language 中获得了以下代码,return 键入的字符数
#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);
}