标记文件输入并在struct中存储数据

时间:2013-10-01 20:02:25

标签: c

我要做的是从文件中读取格式为Data1;Data2;Data3;Data4;Data5的输入我想对此字符串进行标记,并将这些单独的信​​息存储在一个结构中,如;

struct example {
    char data1[10];
    char data2[10];
    char data3[10];
    char data4[10];
    char data5[10];
};

到目前为止,这是我输入功能的内容:

void userInput() { // I will need to change return type
    FILE *file;
    char buffer[BUFFER_SIZE];
    struct example data[5];

    file = fopen(DATA, "r");

    if(file == NULL) {
        printf("Error opening data file.\n");
    }

    while(fgets(buffer, BUFFER_SIZE, file) != null) {
        //tokenize strings, and add to struct here
    }
}

我意识到在我的while函数中我需要类似的东西:

....
char *token = NULL;
token = strtok(string, ";");

while(token != NULL) {
    // add to struct here
    token = strtok(NULL, ";");
}

有人可以解释我如何循环我的结构来添加它吗?或者,如果我甚至以正确的方式解决这个问题?

2 个答案:

答案 0 :(得分:2)

您想要迭代两件事。我假设每行输入对应一个不同的struct example。然后,您想迭代结构中的每个字段。你需要一个计数器来遍历你的data数组,然后你需要一种迭代字段的机制。我会用一个临时数组来完成它:

int i = 0;
while(fgets(buffer, BUFFER_SIZE, file) != null && i < 5) {
    char *fields[] = {
        data[i].data1, data[i].data2, data[i].data3,
        data[i].data4, data[i].data5
    };
    size_t lengths[] = {
        sizeof(data[i].data1), sizeof(data[i].data2), sizeof(data[i].data3),
        sizeof(data[i].data4), sizeof(data[i].data5)
    };
    char *token = NULL;
    int j = 0;
    token = strtok(string, ";");
    while(token != NULL && j < 5) {
        snprintf(fields[j], lengths[j], "%s", token);
        token = strtok(NULL, ";");
        ++j;
    }
    ++i;
}

答案 1 :(得分:1)

如果要使用结构,则需要某种计数器来区分结构元素。类似的东西:

int x = 0;
while(token != NULL) {

    token = strtok(NULL, ";");

    // add to struct here

    if (x == 0){
        data1 = token;
    }else if (x == 1){
        data2 = token;
    }else if (...)
    // ... keep going

    x++;
}