我在理解这看似简单的代码时遇到了问题,该代码在《 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);”的原因实际上将字符放入标准输出。谁能为我提供更多帮助,并告诉我我的逻辑出了什么问题?

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

最佳答案

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


肯定有。

(c = getc(stdin)) != EOF

stdin读取字符到c

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


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

10-06 01:31