区分文件C中的数据

时间:2016-10-26 08:03:24

标签: c file data-structures

我正在尝试读取分为两种不同类型的文件内容。如下所示:

# 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);
}

在我尝试打印出第一个效果类型的那一刻,它打印出“鸟”等。

我觉得我很接近,但我不确定如何处理。

1 个答案:

答案 0 :(得分:0)

问题在于您使用strtok()的方式。从联机帮助页:

  

strtok()函数将字符串解析为一系列标记。在第一次调用strtok()时,应该在str中指定要解析的字符串。在每个应该解析相同字符串的后续调用中,str应为NULL。

这意味着要解析str,您必须先将其称为strtok(str, " "),并进一步解析该字符串,您必须将其称为strtok(NULL, " ")。当您第二次将其称为strtok(str, " ")时,它会从str的开头再次开始。