Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
lor08
150 / 0 / 0
Регистрация: 02.07.2011
Сообщений: 25
1

Построчное чтение данных из файла

04.05.2014, 20:21. Просмотров 1005. Ответов 2
Метки нет (Все метки)

Есть фаил:
HTML5
1
2
3
4
5
6
7
8
9
10
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
С него построчно нужно прочитать данные и записать их в структуру.
Написал код, все вроде работает, но почему-то поле имя записывается неправильно, только последняя строка содержит корректные данные, в чем дело?
Вот код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#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); 
}
И ещё, нужно как то перераспределить память на структуру, ни как от не дойдёт как это сделать!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2014, 20:21
Ответы с готовыми решениями:

Построчное чтение файла
Подскажите как читать файл построчно что бы работало примерно так сначала читается 1 строка из...

Построчное чтение из файла
Всем привет! Помогите написать функцию построчного вывода из файла. Условно, есть файл с таким...

Построчное чтение из файла
Необходимо построчно прочитать данные из файла, из разобрать их по переменным. Образец данных в...

Построчное чтение из файла
Из файла нужно построчно считать числа типа double и записать в массив. Файл примерно выглядит...

Построчное чтение из файла
в файле числа от -50 до 50, записанные каждое в отдельной строке. нужно посчитать сумму...

2
Jewbacabra
Эксперт PHP
3855 / 3175 / 1387
Регистрация: 24.04.2014
Сообщений: 9,650
04.05.2014, 22:06 2
Немного поправил твой код, его еще конечно надо доработать, но на примере выше работает.
Кликните здесь для просмотра всего текста
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#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,&qq,&ww,&ee,&rr);
    printf("%d - %s %d %d %d %d\n",i, her,qq,ww,ee,rr);
    (st+i)->name = (char*)malloc(100*sizeof(char));
    strcpy((st+i)->name, her);
    (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); 
}

А насчет перераспределения памяти можно сделать так: сначала создаешь массив на 10 элементов структуры, когда считываешь 11 элемент, через realloc выделяешь память для 20 элементов и т.д.
0
lor08
150 / 0 / 0
Регистрация: 02.07.2011
Сообщений: 25
05.05.2014, 15:40  [ТС] 3
Все равно в результате выполнения, полуается не-то!
В первых строках нормально, а дальше неочень! Вот результат выполнения вашего кода:
HTML5
1
2
3
4
5
6
7
8
9
10
|        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|
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 15:40

Построчное чтение файла в массив
доброго всем :) своими силами изучаю C. Поставил себе задачу: Есть некий файл. Нужно читать его...

Построчное чтение из файла сделать оптимальнее
Есть вот такой код(linux, компилятор gcc), читающий файл построчно: void fun(...) { ...

Построчное чтение неопределенного количества чисел из файла
Здраствуйте. У меня программа построчно читает числа из файла в масив. Потом выполняется сортировка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru