Построчное чтение данных из файла - C (СИ)
Формулировка задачи:
Есть фаил:
С него построчно нужно прочитать данные и записать их в структуру.
Написал код, все вроде работает, но почему-то поле имя записывается неправильно, только последняя строка содержит корректные данные, в чем дело?
Вот код:
И ещё, нужно как то перераспределить память на структуру, ни как от не дойдёт как это сделать!
selulhmb 83 86 77 82 glrdos 54 48 3 35 canryx 15 59 5 26 cdqqri 45 0 66 37 bxdsj 49 62 14 41 cjdevlycv 98 29 50 59 sutmnk 73 82 10 55 urmik 33 39 63 45 bvdfffr 88 33 39 53 dksxblo 16 68 32 38
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
struct spisok {
char *name;
int mat;
int fiz;
int inf;
int med;
};
int main(void) {
struct spisok *st, *out;
st = (struct spisok *) malloc( 10 * sizeof(struct spisok) );
int i, b=0, n=1;
// Get data
FILE *f2;
if (( f2 = fopen("spisok_in.txt","r")) == NULL){
fprintf(stderr, "Error openning file");
exit(1);
};
//st = (struct spisok *) malloc( n * sizeof(struct spisok) );
char *her; her = (char *) malloc( 100 * sizeof(char) );
int qq,ww,ee,rr;
for (i=0; feof(f2) == 0; i++){
fscanf(f2,"%s %d %d %d %d\n", &her[i],&qq,&ww,&ee,&rr);
printf("%d - %s %d %d %d %d\n",i, &her[i],qq,ww,ee,rr);
(st+i)->name = &her[i];
(st+i)->mat = qq;
(st+i)->fiz = ww;
(st+i)->inf = ee;
(st+i)->med = rr;
//her = (char *) realloc( her, (i+1) * sizeof(char) );
//st = (struct spisok *) malloc( (1+i) * sizeof(struct spisok) );
//(out+i)->name = &her[i];
//if (i=100) break;
}
for(i=0; i<10; i++,st++){
printf("|%16s|%5d|%5d|%5d|%5d|\n", st->name, st->mat, st->fiz, st->inf, st->med);
}
fclose(f2);
}Решение задачи: «Построчное чтение данных из файла»
textual
Листинг программы
| selulhmb| 83| 86| 77| 82| | sglrdos| 54| 48| 3| 35| | sgcanryx| 15| 59| 5| 26| | sgccdqqri| 45| 0| 66| 37| | sgccbxdsj| 49| 62| 14| 41| | sgccbcjdevlycv| 98| 29| 50| 59| | sgccbcsutmnk| 73| 82| 10| 55| | sgccbcsurmik| 33| 39| 63| 45| | sgccbcsubvdfffr| 88| 33| 39| 53| |sgccbcsubdksxblo| 16| 68| 32| 38|