UNIX环境中的高级编程

时间:2015-02-05 17:02:59

标签: c if-statement

我在理解这段看似简单的代码时遇到了问题,这在“UNIX环境中的高级编程"

”一书中有所体现。
#include "apue.h"

int main (void)
{

    int c;

    while((c = getc(stdin)) != EOF)
        if(putc(c, stdout) == EOF)    //this bugs me
            err_sys("output error");
    if(ferror(stdin))
        err_sys("input error");

    exit(0);

}

本书指出该程序使用getc和putc将标准输入复制到标准输出。我理解的部分是,程序打印"输出错误",当没有输出字符时,但我看不到实际将输入转移到输出的任何地方的代码(似乎if循环缺少else块,实际上输出了字符)。

也许有些基本的东西我不会在这里认识到?

编辑: 下面的代码是我如何看待它。在我看来,if比较中的内容只是一个 比较 ,而不是一个完成的实际过程。这就是为什么应该有额外的行" putc(c,stdout);"实际上将字符放入stdout。任何人都可以为我进一步打开这个并告诉我我的逻辑有什么问题吗?

if(putc(c, stdout) != EOF){
    putc(c, stdout);
    else{
        err_sys("output error");
    }   
}

2 个答案:

答案 0 :(得分:3)

  

也许有些基本的东西我不会在这里认识到?

肯定有。

(c = getc(stdin)) != EOF

stdin中的字符读入c

if(putc(c, stdout) == EOF)
    err_sys("output error");

使用cstdout的内容输出到putc,如果通话失败则调用error_sys

答案 1 :(得分:0)

  

我没有看到实际将输入传输到输出的任何地方的代码

这是对putc的调用,它将一个字符写入输出流。

  

程序打印"输出错误",当没有输出字符时

不,如果对putc的调用失败,则会打印出来,表示输出流中存在错误。