ctrl + z是否计为程序中的字符以计​​算字符数

时间:2018-03-18 17:37:19

标签: c eof

以下是计算字符数的程序:

#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

这里程序返回8,这意味着它正在计算&#39; \ n&#39;同样。

123^Z
abs^Z
^Z
8

它再次返回8,那么程序在这里做什么?要么忽略^ Z作为一个字符,要么它不计算&#39; \ n&#39;在^ Z之后。

abc^Zaa
^Z
4

这里程序返回4,这意味着它不计算 ctrl + Z 之后的aa。所以我想知道它是否在^ Z之后没有计算任何字符,或者它也没有计算^ Z,而是计算每行末尾的换行符。那么可以说这里的^ Z也是一种行尾吗?

1 个答案:

答案 0 :(得分:3)

这可能取决于您的操作系统,但通常在行的开头,它意味着关闭输入流并在行刷新输入流的中间。因此,无论如何,您的控件字符在输入时可用(除非您修改终端行为)。试试这个,你会看到:

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