2

我测试了这段代码:

  1 #include <stdio.h>
  2 
  3 main()
  4 {
  5     int c;
  6 
  7     while ((c = getchar()) != EOF) {
  8         putchar(c);
  9         printf("%d ", c);
 10     }
 11     printf("%d\n", c);
 12 }

问题:

当我输入一行字符,然后输入一个“回车”时,我得到了这样的结果:

asdf

a97 s115 d100 f102

当我直接在一行字符后面添加一个 EOF(ctrl+d) 时,我直接在输入后面得到了结果,例如:

asdfa97 s115 d100 f102

我的问题是“输入”是否触发了代码运行?为什么当我输入 EOF 时,不需要“输入”来输出结果?为什么我需要另一个 EOF 才能退出运行?

非常感谢。

4

1 回答 1

1

对于您的第一种情况,您确定输出不是:

asdf
a97 s115 d100 f102 
10 

也就是说,您的输入行asdf在下一行之后是输出字符和数字'a', 's','d''f',然后是另一行(因为您putchar()也是换行符),10上面有一个(换行符的 ASCII 值)?

请注意,您的程序此时也不会退出 - 它仍在等待更多输入。

^D 也没有输入 EOF“字符”。它只是向您的终端程序发送信号。在您的情况下,它看起来意味着“刷新缓冲区”,因此您的程序可以访问终端的行缓冲输入"asdf"。由于您的程序不输出换行符,因此您会在同一行上获得输出。

如果您自己输入^D on 一行,您将导致终端关闭与您的程序的连接,实际EOF将通过,终止您的程序。

示例 - 输入“asdf\n”:

# ./example 
asdf
a97 s115 d100 f102 
10

示例 - 输入“asdf^D”:

$ ./example 
asdfa97 s115 d100 f102

示例 - 输入“asdf\n^D”:

$ ./example 
asdf
a97 s115 d100 f102 
10 -1
于 2014-06-26T23:37:33.590 回答