当我通过命令行输入输入时,为什么我的字符不被计算?

时间:2015-08-29 02:11:24

标签: c

当我使用此代码时,我可以输入命令行并返回我输入的内容:

main() {
  int c;
  while ((c = getchar()) != EOF) {
    putchar(c);
  }
}

输出:

~/code/c $ ./a.out
one
one
two
two

但是当我使用这段代码时,它只在我输入数据时才有效,而不是在我将数据输入命令行时:

main() {
  int nc;
  nc = 0;
  while (getchar() != EOF) {
    nc++;
  }
  printf("%d\n", nc);
}

当我从文本文件中输入数据时:

~/code/c $ ./a.out < practice.txt
14

当我尝试从命令行输入数据时:

~/code/c $ ./a.out
one
two
three

发生了什么?

2 个答案:

答案 0 :(得分:3)

while循环永不退出,因为while (getchar() != EOF)始终为true。完成输入后,按 Cntrl + D for Linux或 Ctrl + Z for Windows表示EOF。

答案 1 :(得分:1)

像所有人一样,你的节目不会停止。 while循环需要一个条件来停止。你必须使用CTRL + Z(Win)或CTRL + D(Unix)来阻止它,当你管道它实际上为你发送该字符。因为EOFEND_OF_FILE。所以当你到达文件的末尾时。操作系统会为您发送该字符。