getchar()!= EOF K& R.

时间:2016-12-13 20:40:18

标签: c codeblocks

我很抱歉提出这个愚蠢的问题而且,我已经检查了与这篇文章相关的帖子仍然没有找到任何帮助。在下面的代码段中:

#include <stdio.h>
main()
{
  int c;
  while((c=getchar()) != EOF)
    putchar(c); 
}

Q1:如果我输入hello,则输出为hello。它不应该只是h,因为尽管getchar可以读取整个字符串,但它只接受一个字符,从而产生h的输出?

Q2:假设我输入了n,不应该按照以下步骤进行:

  1. getchar函数将存储&#39; n&#39;作为单个角色。
  2. 由于c的数据类型是整数,因此存储n的ASCII值,即110。
  3. 这是根据EOF的整数值或-1进行测试的,因为结果为true或布尔值为1,所以循环体被执行。
  4. 执行循环体中的内容后,控件再次返回到&#39;中的状态。循环并再次提示用户输入字符,此循环继续,直到它不等于EOF?

1 个答案:

答案 0 :(得分:4)

getchar()仅使用输入流中的一个字符。所有其他字符都保留在输入流中以供后续检查。

第一次拨打getchar()时,会返回'h'。第二次,它返回'e',然后是'l',依此类推。第六次调用它时,它返回行尾指示符'\n'。第七次调用它时,它会暂停,等待用户输入更多数据。

仅当用户指示文件结束时,该功能才会返回EOF。如果输入来自终端,则用户可以通过键入 CTRL + D (Unix,Linux)或 CTRL + <来指示文件结束kbd> Z (DOS,Windows)。如果输入来自磁盘文件,则在所有文件内容耗尽后指示文件结尾。