gpt4 book ai didi

c - 从 txt 文件读取到动态分配

转载 作者:太空宇宙 更新时间:2023-11-04 03:38:28 25 4
gpt4 key购买 nike

我想从 txt 文件中读取一些数据并将其存储在 s_person 结构中,然后再打印出来。文本文件结构如下所示:

john 43 23
steven 23 44
micheal 11 0

变量数组用于 txt 文件中名称旁边的那 2 个数字。

#include<stdio.h>
#include<stdlib.h>

struct s_person {
char *name;
int *array;
};

这里我有一个构造函数,它构造了你想从文件中读取的 s_person 的数量。

s_person* construct(int number){    
s_person *person = (s_person*)malloc(sizeof(s_person) * number);
if(person){
person->name = (char*)malloc(sizeof(char) * 50);
person->array = (int*)malloc(sizeof(int) * 2);
}
return person;
}

这里是从txt文件中读取数据的函数。它似乎在 fscanf(f,"%s", osoba[i].name); 处第二次运行 while 循环时中断,如果我必须阅读多个行。

 void getData(s_person *person, int number) {
FILE *f = fopen("text.txt", "r");
if(f == NULL){
printf("Error\n");
return;
}
int i=0, j;
while(i < number)
{
fscanf(f,"%s", person[i].name); // Break point at second loop through

// Read numbers from txt file
for(j=0; j<2; j++){
fscanf(f, "%d", &person[i].array[j]);
}
if(feof(f)){
break;
}
i++;
}

fclose(f);
}

我还有打印数据的功能:

void printData(s_person *person, int number)
{
int i, j;
for(i=0; i<number; i++){
printf("%s ", person[i].name);

for(j=0; j<2;j++)
{
printf("%d ", person[i].array[j]);
}
printf("\n");
}
}

主要是这样的:

main()
{
int number = 2;
s_person *person = construct(number);
getData(person, number);
printData(person, number);
free(person);
}

我认为我做错了 fscanf 函数,但我不知道是什么。

如果我要读取一行数据,它会完美运行。 ( int number = 1; )。但是,如果它必须读取不止一行,它会在 fscanf(f,"%s", osoba[i].name); 的 while 循环中第二次运行时中断。

最佳答案

对于 s_person 的每个 number 都需要为 namearray 分配内存

s_person* construct(int number){
int each;
s_person *person = (s_person*)malloc(sizeof(s_person) * number);
if ( person) {
for (each = 0; each < number; each++){
person[each].name = (char*)malloc(sizeof(char) * 50);
person[each].array = (int*)malloc(sizeof(int) * 2);
}
}
return person;
}

关于c - 从 txt 文件读取到动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30414219/

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