我要做的是从文件中读取格式为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, ";");
}
有人可以解释我如何循环我的结构来添加它吗?或者,如果我甚至以正确的方式解决这个问题?
答案 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++;
}