以下是计算字符数的程序:
#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也是一种行尾吗?
答案 0 :(得分:3)
这可能取决于您的操作系统,但通常在行的开头,它意味着关闭输入流并在行刷新输入流的中间。因此,无论如何,您的控件字符在输入时可用(除非您修改终端行为)。试试这个,你会看到:
int c;
while((c=getchar()) != EOF) {
++nc;
printf("read ascii code %d\n",c);
}