我试图将文件内容分段读入可用的结构,'#'符号开始一段而''。符号结束了它。一个例子是:
# Type name
bird
mammal
.
# Type effectiveness
VeryEffective
NotEffective
.
到目前为止,我可以读取第一种类型的内容,但是当我尝试读取第二种内容时,我会不断重读第一种内容。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
typedef struct
{
char types[1000];
char effectiveness[1000];
} sinFile;
sinFile record[1000];
FILE* file;
char line[121];
char period[10];
char Type2[20];
char* item;
char* item2;
int i = 0;
int j;
file = fopen("Test3.txt", "r");
while(fgets(line, 120, file)) {
item = strtok(line, " ");
strcpy(period, ".");
strcpy(Type2, "# Type effectiveness");
if (item[0] == '#' || item[0] == '.') {
continue;
} else {
do {
strcpy(record[i].types, line);
i++;
} while (strcmp(record[i].types, period) == 0);
}
for(j=0; strcmp(line, Type2) == 0; j++) {
do {
strcpy(record[j].effectiveness, line);
j++;
} while (strcmp(record[j].effectiveness, period)== 0);
}
}
fclose(file);
printf("%s", record[1].effectiveness);
}
目前,记录[1] .types给出了与记录[1]相同的结果。效果;即'哺乳动物'。我觉得我很接近,但我不知道该怎么办。
答案 0 :(得分:0)
此代码中存在许多问题。为了使它工作,应该使用类似这样的样本。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
typedef struct
{
char types[1000];
char effectiveness[1000];
} sinFile;
sinFile record[1000];
FILE* file;
char line[121];
char* bp;
int i=0, j=0;
int state=0;
file = fopen("Test3.txt", "r");
while(fgets(line, 120, file)) {
for(bp=line;isspace(*bp);bp++);
if(state==0) {
if(*bp=='#') {
for(bp=line;isspace(*bp);bp++);
item = bp;
if(!strcmp(item,"Type name")) state=1;
else if(!strcmp(item,"Type effectiveness")) state=2;
}
}
else {
if(*bp=='.') {
state=0;
}
else if(state==1) {
strcpy(record[i].types, bp);
i++;
}
else if(state==2) {
strcpy(record[j].effectiveness, bp);
j++;
}
}
}
fclose(file);
printf("%s", record[1].effectiveness);
}
但是使用这个代码,第一个块中的行必须与第二个块中的行对应...使用没有块的键/值对会更简单。