【问题标题】:Error checking delimited fscanf错误检查分隔 fscanf
【发布时间】:2015-10-28 00:01:41
【问题描述】:

我正在尝试使用 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 停止?

提前感谢所有帮助。c

【问题讨论】:

    标签: c scanf csv


    【解决方案1】:

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

    也许您想改用fgets 来读取单行输入 - 这样,一旦遇到换行符,输入读取将停止。

    【讨论】:

    猜你喜欢
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多