从由制表符分隔的文件中读取记录

时间:2016-04-10 22:36:43

标签: c

输入文件:

Joe Smith    10 Main St.    555-1212

我正在从具有上述格式的文件中读取记录,该文件包含由标签分隔的3个字段,名称地址和电话号码。

while (fscanf(fp, "%s%s%s", rec[size].name, rec[size].address, rec[size].phone_number) != EOF)
{
    size++;
}

我必须在第一个单词中包含空格,然后忽略标签并开始阅读下一个字段。

1 个答案:

答案 0 :(得分:1)

char buffer[4096];
int n;

while (fgets(buffer, sizeof(buffer), fp) != 0)
{
    if ((n = sscanf(buffer, "%[^\t] %[^\t] %[^\t\n]",
        rec[size].name, rec[size].address, rec[size].phone_number)) != 3)
    {
        if (n != EOF)
            fprintf(stderr, "Error: faulty record without 3 fields at:\n%s",
                    buffer);
        break;
    }
    size++;
}

请注意,这使用fgets()来读取行。它检查sscanf()读取三个字段。你不应该得到n == EOF,而是为了以防万一。错误消息是在标准错误上报告的,并且包括导致问题的行(fgets()sscanf()的主要优点之一是您为重试或错误报告捕获了行。)< / p>