我有一个大约1000行(或记录)的文件,每行包含
int
long long int
char array
char array
int
以空格分隔。
例如,这是文件的一部分:
5 23432 this is 12
6 32342 a string 23
7 32211 another one 43
我正在使用以下版本的fscanf()
来读取文件中的输入:
fscanf( p_file, "%d %lld %s %s %d\n", &a, &b, c, d, &e);
p_file是一个文件指针。
假设,如果一行有更多字段而不是5,则此函数将停止读取。如何跳过损坏的记录(不匹配的记录)并继续阅读下一条记录? 感谢您提前提供任何帮助。
修改 我想丢弃记录,跳到下一个记录,而不是对腐败记录进行任何更改
编辑2:
如果我的文件包含以下行:
5 23432 this is 12
6 32342 a string 23 5432
7 32211 another one 43
输出必须是:
5 23432 this is 12
7 32211 another one 43
因为第二行没有所需的字段数量
答案 0 :(得分:0)
您可以通过检查最后一个号码后面的字符是否为' \ n'来执行此操作:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char const *argv[]){
FILE *p_file = fopen("data.txt", "r");
if(!p_file)
{
perror("fopen()");
exit(1);
}
int a, e;
long long b;
char c[80], d[80], end;
while(fscanf(p_file, " %d %lld %s %s %d%c", &a, &b, c, d, &e, &end) == 6)
{
if(end != '\n')
{
fscanf(p_file, "%*[^\n]");
continue;
}
printf(" %d %lld %s %s %d\n", a, b, c, d, e);
}
return 0;
}