试图在 C 中读取格式化文件
Trying to read formatted file in C
我正在尝试读取 C 中的格式化文件,这是该文件的示例行:
SURNAME;NAME;MINUTES'SECONDS''ONE-HUNDREDTHS OF A SECOND
我写了这段代码:
while(!feof(fp))
{
fscanf(fp,"%[^;]s",surname);
fscanf(fp,"%c",&c);
fscanf(fp,"%[^;]s",name);
fscanf(fp,"%c",&c);
fscanf(fp,"%d'%d''%d",&min,&sec,&sec_cent);
fscanf(fp,"\n");
}
它适用于名称和姓氏字符串,但它不会提取时间 MINUTES'SECONDS''ONE-HUNDREDTHS OF A SECOND 我不知道为什么
有人可以帮助我吗?
您可能希望在代码中更改几处内容:
- 始终检查
scanf
(或 fscanf
)的 return 值以查看是否读取了所有数据。
- Don't use
feof()
to control a loop.
- 您不需要使用 scanf 提取
'\n'
,除非您之后要使用 getline()
。
- 您也不需要
s
,使用该格式说明符,但您应该防止缓冲区溢出限制每个字段读取的字符数。
- 您可以使用修饰符
%*c
跳过一个字符(;
)。
这应该没问题:
int min = 0, sec = 0, sec_cent = 0;
char name[128], surname[128];
while ( fscanf(fp, "%127[^;]%*c%127[^;]%*c%2d'%2d''%2d", surname, name,
&min, &sec, &sec_cent) == 5 ) {
// do something...
}
我正在尝试读取 C 中的格式化文件,这是该文件的示例行:
SURNAME;NAME;MINUTES'SECONDS''ONE-HUNDREDTHS OF A SECOND
我写了这段代码:
while(!feof(fp))
{
fscanf(fp,"%[^;]s",surname);
fscanf(fp,"%c",&c);
fscanf(fp,"%[^;]s",name);
fscanf(fp,"%c",&c);
fscanf(fp,"%d'%d''%d",&min,&sec,&sec_cent);
fscanf(fp,"\n");
}
它适用于名称和姓氏字符串,但它不会提取时间 MINUTES'SECONDS''ONE-HUNDREDTHS OF A SECOND 我不知道为什么
有人可以帮助我吗?
您可能希望在代码中更改几处内容:
- 始终检查
scanf
(或fscanf
)的 return 值以查看是否读取了所有数据。 - Don't use
feof()
to control a loop. - 您不需要使用 scanf 提取
'\n'
,除非您之后要使用getline()
。 - 您也不需要
s
,使用该格式说明符,但您应该防止缓冲区溢出限制每个字段读取的字符数。 - 您可以使用修饰符
%*c
跳过一个字符(;
)。
这应该没问题:
int min = 0, sec = 0, sec_cent = 0;
char name[128], surname[128];
while ( fscanf(fp, "%127[^;]%*c%127[^;]%*c%2d'%2d''%2d", surname, name,
&min, &sec, &sec_cent) == 5 ) {
// do something...
}