我正在尝试使用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停止进入或类似的东西?
提前感谢任何帮助。
答案 0 :(得分:2)
fscanf
不会停止,直到(a)输入格式已被完全读取,(b)输入无法匹配预期的格式(例如scanf("%d")
与缓冲区中的字母字符)或(c)到达文件结尾。因此,如果您的input
文件已连接到终端,并且您键入name:
期望fscanf
退出,您会发现它只是等待您完成。
也许您想要使用fgets
来读取单行输入 - 这样,一旦遇到换行符,输入读数就会停止。