检查分隔的fscanf

时间:2015-10-28 00:01:41

标签: c scanf delimited-text

我正在尝试使用fscanf来读取冒号分隔的文件并取出某些信息。我正在使用一个函数来执行此操作,并且遇到一些错误检查问题。功能是

int
print_name_number(FILE *input, FILE *output)
{
    char name[24];
    char address[50];
    char phone[50];
    char other[50];
    char age[50];

    while (fscanf(input, "%24[^:]:%50[^:]:%50[^:]:%50[^:]:%50s[^:]"
          , name, address, phone, other, age) != EOF)   
    fprintf(output, "%s %-24s\n", name, phone);

    return EXIT_SUCCESS;
}

现在有效,但我正在寻找一种方法来检查读取的行是否实际上是格式"名称第二:地址:电话:其他:年龄"。我已经尝试检查fscanf是否等于5,但是如果在fscanf中读取的内容少于5个,则只是继续尝试读取内容。如果只有"名称:"是否有办法导致scanf停止进入或类似的东西?

提前感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

fscanf不会停止,直到(a)输入格式已被完全读取,(b)输入无法匹配预期的格式(例如scanf("%d")与缓冲区中的字母字符)或(c)到达文件结尾。因此,如果您的input文件已连接到终端,并且您键入name:期望fscanf退出,您会发现它只是等待您完成。

也许您想要使用fgets来读取单行输入 - 这样,一旦遇到换行符,输入读数就会停止。