输入文件:
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++;
}
我必须在第一个单词中包含空格,然后忽略标签并开始阅读下一个字段。
答案 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>