gpt4 book ai didi

c 遍历一个数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:24:29 24 4
gpt4 key购买 nike

我的代码有问题我读取了一个文件并将文件中的数据推送到结构数据类型中

但是当遍历 dataValue 时,它​​应该是一个结构数组它给了我相同的数据值,特别是文件中的最后一个。

int main() {
FILE *file;
struct characteristic {
double * dval;
double n;
char * name;
};
struct characteristic dataValue[150];
if ((file = fopen("/XXX/XXX/XXX/XXX/data", "r"))
== NULL) {
puts("error reading file");
exit(1);
} else {
int i = 0;
double var1, var2, var3, var4;
char * etiq = malloc(sizeof(char) * 100);
while (fscanf(file, "%lf,%lf,%lf,%lf,%s \n", &var1, &var2, &var3, &var4,
etiq) != EOF) {
struct characteristic *new_node;
new_node = (struct characteristic *) malloc(
sizeof(struct characteristic));
new_node->dval = &var1;
(new_node->dval)++;
new_node->dval = &var2;
(new_node->dval)++;
new_node->dval = &var3;
(new_node->dval)++;
new_node->dval = &var4;
new_node->name = etiq;
puts("=================================================");

printf("the name of characteristic number %d est : %s .\n", i,
new_node->name);
dataValue[i].dval = new_node->dval;
dataValue[i].name = new_node->name;
dataValue[i].n = i;
i++;
}

}
int i,j;
for (i = 0; i < sizeof(dataValue) / sizeof(struct characteristic); i++) {
printf("second name of characteristic number %d est : %s .\n", i,
dataValue[i].name);
for (j = 0; j < 4; j++) {

printf("bla value of vector number %d at index %d est : %lf \n", i,
j, *(dataValue[i].dval + j));
}
}
return EXIT_SUCCESS;
}

文件包含如下数据:1.0,2.7,4.9,1.5,名称

最佳答案

您的代码使用了一个未初始化的指针 dval,并且您在打印之前为其分配了超出范围的局部变量地址。这不是在 C 中创建数组的方法。

您可以使用 malloc 将数组分配到 dval 中,但是您还必须 free() 该数组。由于您知道节点中将有四个 double,因此将 dval 设为包含四个项目的数组会更简单,如下所示:

struct characteristic {
double dval[4];
double n;
char * name;
};

现在您可以使用指针或数组语法进行赋值:

dataValue[i].dval[0] = var1;
dataValue[i].dval[1] = var2;
dataValue[i].dval[2] = var3;
dataValue[i].dval[3] = var4;
dataValue[i].n = i;
// Store etiq in the name, or make a copy:
dataValue[i].name = etiq;
// Prepare etiq for the next loop
etiq = malloc(100); // No need to multiply by sizeof(char)

关于c 遍历一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33760437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com