我在理解这看似简单的代码时遇到了问题,该代码在《 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");
使用
c
将stdout
的内容输出到putc
,如果调用失败,则调用error_sys
。