使用fscanf读取带分隔符的文件
我正在尝试读取一个文件,该文件使用2个冒号作为使用fscanf的分隔符。例如: 输入 :西瓜::美味的水果::土豆::蔬菜:: 每个产品和定义都由冒号分隔。我试图遍历这个列表,以便打印出定义和输出 输出:(通过printf) 西瓜 美味的水果 马铃薯 蔬菜 我不知道如何通过while循环进行迭代,现在只是一遍又一遍地打印西瓜 谢谢你的帮助 使用strtok()是关键:使用fscanf读取带分隔符的文件,c,C,我正在尝试读取一个文件,该文件使用2个冒号作为使用fscanf的分隔符。例如: 输入 :西瓜::美味的水果::土豆::蔬菜:: 每个产品和定义都由冒号分隔。我试图遍历这个列表,以便打印出定义和输出 输出:(通过printf) 西瓜 美味的水果 马铃薯 蔬菜 我不知道如何通过while循环进行迭代,现在只是一遍又一遍地打印西瓜 谢谢你的帮助 使用strtok()是关键: #include <stdio.h> #include <stdlib.h> #include <
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main () {
FILE * fl;
long fl_size;
char * buffer;
size_t res;
fl = fopen ( "fruits.txt" , "r+" );
if (fl==NULL) {
fprintf (stderr, "File error\n");
exit (1);
}
fseek (fl , 0 , SEEK_END);
fl_size = ftell (fl);
rewind (fl);
buffer = (char*) malloc (sizeof(char)*fl_size);
if (buffer == NULL) {
fputs ("Memory error",stderr);
exit (2);
}
res = fread (buffer,1,fl_size,fl);
if (res != fl_size) {
fputs ("Reading error",stderr);
exit (3);
}
/*
* THIS IS THE PART THAT IS IMPORTANT FOR THE QUESTION!!
*/
char * strtok_res;
strtok_res = strtok(buffer, "::");
while (strtok_res != NULL)
{
printf ("%s\n", strtok_res);
strtok_res = strtok (NULL, "::");
}
/*
* DONE!
*/
fclose (fl);
free (buffer);
return 0;
}
#包括
#包括
#包括
int main(){
文件*fl;
长FLU尺寸;
字符*缓冲区;
大小;
fl=fopen(“fruits.txt”,“r+”);
如果(fl==NULL){
fprintf(stderr,“文件错误”\n);
出口(1);
}
fseek(fl,0,SEEK_END);
fl_尺寸=ftell(fl);
倒带(fl);
缓冲区=(char*)malloc(sizeof(char)*fl_size);
if(buffer==NULL){
fputs(“内存错误”,标准);
出口(2);
}
res=fread(缓冲区,1,fl_大小,fl);
如果(分辨率=fl\U尺寸){
fputs(“读取错误”,标准);
出口(3);
}
/*
*这是问题的重要部分!!
*/
char*strtok_res;
strtok_res=strtok(缓冲区“:”);
while(strtok_res!=NULL)
{
printf(“%s\n”,strtok_res);
strtok_res=strtok(NULL,“:”);
}
/*
*完成了!
*/
fclose(fl);
自由(缓冲);
返回0;
}
如果您可以确保文件的格式为
:<produce>::<description>::<produce>::<description>:...
给我们看看你的代码。
char produce[100], description[100];
if ((fscanf(file, ":%99[^:]::%99[^:]:", produce, description) != 2)
{
/* Handle read error or EOF */
}