使用fscanf()

时间:2016-04-04 14:13:04

标签: c++ c file scanf

我有一个大约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

因为第二行没有所需的字段数量

1 个答案:

答案 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;
}