使用外部功能检查标准输入和标准输出

问题描述 投票:0回答:2

作用域会产生影响,在从stdin获取输入或输出到stdout时检查错误吗?例如,如果我以以下方式构建代码体:

void streamCheck(){
   if (ferror(stdin)){
      fprintf(stderr, "stdin err");
      exit(1);
   }
   if (ferror(stdout)){
      fprintf(stderr, "stdout err");
      exit(2);
   }
}

int main(){
   int c = getchar();
   streamCheck();
   ...
   putchar(c) 
   streamCheck();
}

ferror(stdin)/ ferror(stdout)的返回值是否受我在函数而不是main中检查它们的事实的影响?如果有更好的方法可以做到这一点,请让我知道我对C还是陌生的。

c stdout stdin ferror
2个回答
0
投票

只要在特定流上调用ferror,然后再在该流上调用任何其他函数,就可以了。

与从ferrorgetchar被调用的另一个函数中调用putchar无关紧要。


0
投票

您的功能没有问题。 ferror()检查作为参数传递的FILE *的错误指示。换句话说,错误指示符是文件对象的属性,可以直接从FILE *指针获得。因此,无论从何处调用ferror(),都可以确定作为参数传递的FILE *是否发生错误(当然,该参数是否有效)。

© www.soinside.com 2019 - 2024. All rights reserved.