getchar()和EOF

(c=getchar())!=E0F

  这个式子很熟悉,但一直都没有去理解它的原理。所以今天在网上一顿搜索,基本理解了这些问题。

1.getchar()函数:

  这个函数是以行为单位进行存储的。停止的条件是接收到回车'\n'和结束符EOF。它的返回值有正负数,当有输入时候一般返回正直,除非遇到停止的消息时候,才会返回-1,即EOF;

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

  在这里,getchar和putchar应该每次读入和输出一个字符,但是在终端上我们却发现情况并非如此,而是等待输入一行完成时才有输出。造成这种情况的原因是由于输入在停止前,操作系统的驱动不会通知getchar函数,控制权一直在getchar函数上,getchar函数这时处于阻塞状态,直到停止符出现,控制权才会交给putchar函数,完成输出。 

2.EOF

  EOF作为换行符,可以通知输入ctl+D来实现EOF的输入。在getchar函数中,通过这种操作可以结束它的阻塞。

  

  

posted @ 2012-10-26 20:55  cococo点点  阅读(293)  评论(0编辑  收藏  举报