2016-12-13 59 views
0

我很抱歉问这个愚蠢的问题,而且我已经检查过与这篇文章相关的帖子,但仍然没有找到任何帮助。在下面的代码片断:getchar()!= EOF K&R

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

Q1:如果我输入hello,输出是hello。不应该只是h,因为虽然getchar可以读取整个字符串,但它只接受一个字符,因此产生输出为h

Q2:假定I输入n,不应它按照以下步骤:

  1. getchar函数将存储 'N' 为单个字符。
  2. 由于c的数据类型是整数,所以n的ASCII值被存储,即110。
  3. 这是针对EOF的整数值或-1进行测试的,因为结果为true或布尔值为1 ,循环的主体被执行。
  4. 执行循环体内的内容后,控件再次返回到'while'循环的条件,并且提示用户再次输入该字符,并且该循环继续进行直到它不等于EOF ?
+0

你只是复制你输入的字符作为输入。但c总是保存你输入的最后一个字符,忘记其他字符。 –

+1

Q2不会在第一季回答你的问题吗?当你输入'hello'时,它会在第一次读取'h',并在执行主体后回到循环的开头。下一次它读取'e',等等。 – Barmar

+1

Upvoted使用'int c;'...但是'main'签名是错误的。 'int main(void)'。 –

回答

4

getchar()只消耗输入流中的一个字符。所有其他字符保留在输入流中供后续检查。

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

只有当用户指出文件结束时,函数才会返回EOF。如果输入是从终端,用户可能通过输入CTRL指示文件结束 + d(UNIX,Linux)或CTRL + ž(DOS,Windows)中。如果输入来自磁盘文件,则在文件的所有内容都用尽后指示文件结尾。

+0

非常感谢。我想,我可能想要读取getchar的全部功能。总之,我非常感谢你们! – Wayne