C语言文件读取问题:文件不存在时'Read error'重复打印排查
解决C语言中文件不存在时错误信息重复打印的问题
看起来你碰到了一个挺典型的小问题——目标文件不存在时,Read error居然被打印了两次。先把你的代码片段贴出来方便分析:
int loadFlights(char flightDatabase[50], int totalflights, flight_t f[MAX_NUM_FLIGHTS]) { int counter; FILE *fp; fp = fopen("database.txt", "r"); if(fp == NULL) { // 问题出在这里:这条打印被执行了两次 printf("Read error\n"); return 1; } fscanf(fp, "%d", &totalflights); if (totalflights > 5) { totalflights = 5; } // 后续for循环代码省略 }
最可能的几个原因及解决办法
我碰到过好几次这种情况,大概率是下面其中一个原因:
loadFlights函数被调用了两次
先去检查你的主函数或者其他调用这个函数的地方,是不是不小心写了两次loadFlights(...),或者在某个循环里重复触发了调用。比如主函数里如果有这样的代码:loadFlights(db, num, flights); // 中间没做判断,又调用了一次 loadFlights(db, num, flights);那每次文件不存在都会触发一次打印,自然就出现两次了。解决办法就是排查调用逻辑,确保只调用一次。
调用处也重复打印了错误信息
很多人会在调用函数后,又判断返回值再打印一次错误,比如:int ret = loadFlights(db, num, flights); if (ret != 0) { printf("Read error\n"); // 这里又打印了一次! }这种情况的话,要么去掉
loadFlights内部的打印,统一在调用处处理错误输出;要么去掉调用处的打印,只保留函数内部的。建议统一逻辑,避免重复输出。额外小建议:用
perror替代单纯的printf
其实你可以把错误打印改成perror("Read error"),这样不仅会输出你自定义的提示,还会附带系统给出的具体错误原因(比如文件不存在会显示No such file or directory),既能确认错误触发的原因,也方便排查是不是真的每次都是同一个条件触发的打印:if(fp == NULL) { perror("Read error"); return 1; }
内容的提问来源于stack exchange,提问作者Angus Ryan
相关产品推荐
相关产品推荐

