【发布时间】:2018-08-08 15:42:26
【问题描述】:
我希望能够在不停止读取的情况下确定我正在读取的文件是否包含错误类型的数据。
例如:这里我想从文件中存储一些整数,但如果我的文件中有一些字符,它将停止循环。我不知道如何避免这种情况以及如何返回匹配类型的错误。
int main (void) {
FILE* input_file = fopen("toto.txt", "r");
int a [10];
if (input_file != NULL) {
int i =0;
while (fscanf(input_file, "%d", &a[i]) == 1) {
//do something
}
fclose(input_file);
}
else {
printf ("open failed.");
}
return 0;
}
【问题讨论】:
-
编写自己的解析器。逐字符读取文件,检查所有条件,使用strtoll将字符串转换为数字,
-
fscanf(input_file, "%d %d", &a[i])是未定义的行为 - 您有两个格式说明符,但只有一个参数。 -
@AndrewHenle 编辑,我的错误
-
谢谢。我会在这里回应@KamilCuk 的评论:你真的不能使用
scanf()系列中的任何一个来可靠地解析可能错误的数据。 scanf 中的 f 本身来自“格式化” - 如“扫描格式化数据”。这些函数假定输入数据已经匹配一种非常严格的格式,并且它们确实会以不可预知的方式在意外数据类型上严重失败。 -
"但如果我的文件中有一些字符,它将停止循环。" --> 清楚地说明当这种情况发生时你希望代码做什么。忽略字符?
标签: c error-handling scanf