我在理解这段看似简单的代码时遇到了问题,这在“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");
}
}
答案 0 :(得分:3)
也许有些基本的东西我不会在这里认识到?
肯定有。
(c = getc(stdin)) != EOF
将stdin
中的字符读入c
。
if(putc(c, stdout) == EOF)
err_sys("output error");
使用c
将stdout
的内容输出到putc
,如果通话失败则调用error_sys
。
答案 1 :(得分:0)
我没有看到实际将输入传输到输出的任何地方的代码
这是对putc
的调用,它将一个字符写入输出流。
程序打印"输出错误",当没有输出字符时
不,如果对putc
的调用失败,则会打印出来,表示输出流中存在错误。