我正在尝试读取分为两种不同类型的文件内容。如下所示:
# Type names
bird
mammal
reptile
.
# Type effectiveness
Very_effective
Not_effective
.
到目前为止,我可以读取第一种类型的内容,但是当我尝试读取第二种内容时,我不断重读第一种内容。
#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 hash[10];
char* item;
char* item2;
int i = 0;
int j = 0;
file = fopen("Test.txt", "r");
while(fgets(line, 120, file)) {
item = strtok(line, " ");
strcpy(period, ".");
if (item[0] == '#') {
continue;
} else {
do {
strcpy(record[i].types, line);
i++;
} while (strcmp(record[i].types, period) == 0);
}
item2 = strtok(line, " ");
if (item2[0] == '#') {
continue;
} else {
do {
strcpy(record[j].effectiveness, line);
j++;
} while (strcmp(record[j].effectiveness, period)== 0);
}
}
fclose(file);
printf("%s", record[0].effectiveness);
}
在我尝试打印出第一个效果类型的那一刻,它打印出“鸟”等。
我觉得我很接近,但我不确定如何处理。
答案 0 :(得分:0)
问题在于您使用strtok()
的方式。从联机帮助页:
strtok()函数将字符串解析为一系列标记。在第一次调用strtok()时,应该在str中指定要解析的字符串。在每个应该解析相同字符串的后续调用中,str应为NULL。
这意味着要解析str
,您必须先将其称为strtok(str, " ")
,并进一步解析该字符串,您必须将其称为strtok(NULL, " ")
。当您第二次将其称为strtok(str, " ")
时,它会从str
的开头再次开始。