#include <stdio.h>
#define NEWLINE '\n'
#define SPACE ' '
int main(void)
{
int ch;
int count = 0;
while((ch = getchar()) != EOF)
{
if(ch != NEWLINE && ch != SPACE)
count++;
}
printf("There are %d characters input\n" , count);
return 0;
}
问:
一切都运行得很好,所以会忽略空格和换行,并输出输入到屏幕上的字符数(在这个程序中,我只是将逗号,感叹号,数字或任何可打印的特殊符号字符,例如&符号作为字符),当我点击EOF模拟中的
^z
。但是我输入这行到程序时出错了。例如我输入:
abcdefg^z
,这意味着我在^z
之前和之后输入一些字符。程序不会终止程序并打印出全部字符,而是继续询问输入。EOF终止字符输入仅适用于当我在一行上指定
^z
或执行此操作时:^zabvcjdjsjsj
。这是为什么发生?
然后,为什么^ z不是一个字符,当我把它放在一行中的字符串之后?例如“abcdefg^z”只返回我“输入7个字符”而不是8个字符后输入该行之后的^ z。 – caramel1995
@ caramel23:我相信Windows控制台会忽略它,并且不会将字符传递给正在运行的程序。我不知道为什么会发生这种情况。 –