作用域会产生影响,在从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还是陌生的。
只要在特定流上调用ferror
,然后再在该流上调用任何其他函数,就可以了。
与从ferror
或getchar
被调用的另一个函数中调用putchar
无关紧要。
您的功能没有问题。 ferror()
检查作为参数传递的FILE *
的错误指示。换句话说,错误指示符是文件对象的属性,可以直接从FILE *
指针获得。因此,无论从何处调用ferror()
,都可以确定作为参数传递的FILE *
是否发生错误(当然,该参数是否有效)。