如何阅读“;”从c中的文件中分离出的字符串? 我使用以下方法:
char c;
c=fgetc(fp);
while(c!=EOF)
{
int k=0;
if(c=='\n')
c=fgetc(fp);
while(c!=';')
{
str1[k]=c;
k++;
c=fgetc(fp);
}
str1[k]='\0';
c=fgetc(fp);
k=0;
while(c!=EOF && c!='\n')
{
str2[k]=c;
k++;
c=fgetc(fp);
}
str2[k]='\0';
Seq(str1,str2);
printf("\n");
if(c==EOF)
{
break;
}
else
c=fgetc(fp);
}
输入文件:
Hello;world Male;Female where;who
我必须读取不同的字符串值,然后将它们作为Seq(hello,world)传递给函数..依此类推
有更好的方法吗?
答案 0 :(得分:5)
更好的方法是从文件中读取行,然后使用strchr
,strpbrk
,strcspn
,strtok
,sscanf
或其他库函数找到';'。
答案 1 :(得分:3)
while (fscanf(fp, " %[^;];%s", str1, str2) == 2)
Seq(str1, str2);
请确保str1
和str2
足够大!
格式说明:
(空格):跳过任何空格,包括换行符。%[^;]
:读取一个不能包含分号的字符串。这不会跳过前导空格,因此我们必须明确地执行此操作(感谢@MOHAMED)。;
:阅读并丢弃分号。如果不存在则匹配失败。%s
:读取一个字符串直到空格,所以基本上直到行尾。 fscanf
返回匹配字段的数量。我们正在寻找两个,所以如果结果是任何其他数字,则输入失败。如果您的文件格式正确,那么feof(fd)
应该返回true,否则匹配会提前失败。
要正确偏执,您还应该包括str1
和str2
的字段宽度,以确保不会出现缓冲区溢出。因此,如果你分配了100个字节,你将使用%99[^;]
(留下一个字节用于零终结符)。
答案 2 :(得分:1)
您可以使用“%[^;];%[^ \ n]”作为fscanf()的格式说明符来执行此操作。它将读取文件,直到遇到分号,然后格式说明符字符串中的分号将“吃掉”文件中该单词后面的分号。