Построчное чтение данных из файла - 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|

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.462 из 5
Похожие ответы