【发布时间】:2011-08-13 06:12:30
【问题描述】:
我正在使用 fscanf 从 C 中的文件中读取数据。我只是想知道我是否正确检查了所有错误条件,这是最可靠的方法,我没有遗漏任何内容。
FILE* fp;
char filename[] = "untitled";
int count;
char item1[1025];
char item2[1025];
fp = fopen(filename, "r");
if (fp == NULL) {
perror("fopen");
return -1;
}
count = fscanf(fp, "%1024s%1024s", item1, item2);
if (count == EOF) {
if (ferror(fp)) {
perror("fscanf");
}
else {
fprintf(stderr, "Error: fscanf matching failure\n");
}
return -1;
}
else if (count == 0) {
fprintf(stderr, "Error: fscanf early matching failure\n");
return -1;
}
else if (count != 2) {
fprintf(stderr, "Error: fscanf matched less items than expected\n");
return -1;
}
if (fclose(fp) == EOF) {
perror("fclose");
return -1;
}
感谢您的宝贵时间。
在 cmets 之后编辑:
count = fscanf(fp, "%1024s%1024s", item1, item2);
if (count == EOF) {
if (ferror(fp)) {
perror("fscanf");
}
else {
fprintf(stderr, "Error: fscanf reached end of file, no matching characters, no matching failure\n");
}
return -1;
}
else if (count != 2) {
fprintf(stderr, "Error: fscanf successfully matched and assigned %i input items, 2 expected\n", count);
return -1;
}
【问题讨论】:
标签: c error-handling scanf