程序中ctrl+z是否算作一个字符来统计字符个数

Does ctrl+z count as a character in a program to count the number of characters

下面是一个统计字符数的程序:

#include<stdio.h>
main()
{
    long nc;
    nc = 0;
    while(getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}

正如我们在这里看到的- Why does getchar() recognize EOF only in the beginning of a line? ctrl+z 在一行中写入时不被视为 EOF字符数,仅当写在行首时才被视为 EOF。

所以这些是程序的以下一些输出:

123
abs
^Z
8

这里的程序 returns 8 所以这意味着它也在计算 '\n'。

123^Z
abs^Z
^Z
8

又是returns 8 那么程序在这里做什么?它要么忽略 ^Z 作为字符,要么不计算 ^Z 之后的 '\n'。

abc^Zaa
^Z
4

此处程序返回 4,这意味着它在 ctrl+Z 后不计算 aa。所以我想知道它是否不计算 ^Z 之后的任何字符,或者它也不计算 ^Z 但计算每行末尾的换行符。那么是不是可以说这里的^Z也起到了行尾的作用呢?

这可能取决于您的 OS,但通常在行的开头表示 关闭输入流 而在行的中间 刷新输入流。因此,在任何情况下,您的控制字符都可用于输入(除非您修改了终端行为)。试试这个,你会看到:

int c;
while((c=getchar()) != EOF) {
    ++nc;
    printf("read ascii code %d\n",c);
}