1
我想從txt文件中讀取一些數據,並將其存儲在s_person結構體中,而不是打印後者。 文本文件結構如下所示:從txt文件讀入動態分配的
john 43 23
steven 23 44
micheal 11 0
數組變量是爲那些2號旁邊的txt文件名。
#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文件中讀取數據的函數。如果我必須讀取多於一行,它似乎在第二次運行時通過while
循環在fscanf(f,"%s", osoba[i].name);
處中斷。
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函數是我做錯了,但我還沒有」 t斯萊特想什麼。
如果我有一行數據要讀取,它會很好地工作。 (int number = 1;
)。但是如果它必須讀取多於一行,它會在第二次運行時斷開,while循環在fscanf(f,"%s", osoba[i].name);
。
感謝。它現在有效。只是一個語法變化:它顯示人[每個] - >名稱的錯誤,但它可以與person [each] .name正常工作 –