Форум программистов, компьютерный форум CyberForum.ru

Считывание структур из файла - C++

Восстановить пароль Регистрация
 
Bramme
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 60
19.05.2013, 21:50     Считывание структур из файла #1
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define Lmax 20
 
struct student
{
 struct {
    char name[Lmax],surname[Lmax],patronymic[Lmax];
    } fio;
 struct {
     int mark1,mark2,mark3,mark4,mark5; float average;
    } uspev;
 char group[Lmax];
student *next;
};
 
student* queue(char name[]){
   student *tek,*queue=NULL;
   int i; int B[5]={0};
   FILE *f;
   if (!(f=fopen("D:\\Utilities\\QtProj\\Que\\in.txt","r")))
      puts("File not found");
   else
      {
      while(!feof(f))
         { //выделение памяти для новой записи
         tek=(student*)malloc(sizeof(student));
            fgets(tek->fio.name,Lmax,f);
            tek->fio.name[strlen(tek->fio.name)-1]='\0';
            fgets(tek->fio.surname,Lmax,f);
            tek->fio.surname[strlen(tek->fio.surname)-1]='\0';
            fgets(tek->fio.patronymic,Lmax,f);
            tek->fio.patronymic[strlen(tek->fio.patronymic)-1]='\0';
            fgets(tek->group,Lmax,f);
            tek->group[strlen(tek->group)-1]='\0';
            for (i = 0; i < 5; ++i)
                fscanf(f,"%d", &B[i]);
            i=0;
            fgetc(f); // тут для меня не совсем понятно взаимодействие функций scanf и gets
            tek->uspev.mark1=B[0];
            tek->uspev.mark2=B[1];
            tek->uspev.mark3=B[2];
            tek->uspev.mark4=B[3];
            tek->uspev.mark5=B[4];
            tek->uspev.average=(B[0]+B[1]+B[2]+B[3]+B[4])/5;
            tek->next=NULL;
            if (queue!=NULL)
                queue->next=tek; else queue=tek;
         }
      free(tek);
      }
   return(queue);
   }
 
student* viv(student* queue) { //в данной процедуре проверяю правильность считанных данных
    student *tek;
    tek=queue;
    while (tek) {
        printf("%s\n",tek->fio.name);
        tek=tek->next;
}
}
 
int main() {
student *first; //указатель на вершину очереди
char name1[Lmax],name2[Lmax];
printf("Input file name: ");
gets(name1);
printf("Output file name: ");
gets(name2);
first=queue(name1);
viv(first);
return 0;
}
Добрый вечер. В вышеупомянутом коде мне необходимо считать структуры из файла, и составить линейную очередь из этих структур(вид структуры:
Имя
Фамилия
Отчество
Группа
Баллы
Средний Балл.
Средний балл в файле не записывается, высчитывается в самой программе. Каждое поле структуры занимает в файле одну строку, а массив оценок размещается на отдельной строке). Считывание в моей программе проводится некорректно. Данные в файле записаны у меня следующим образом:
Alex
Petrov
Ivanovich
FPM
2 4 5 6 7
Sergei
Ivanov
Petrovich
FEM
1 5 7 2 10

Укажите, пожалуйста, на ошибку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2013, 21:50     Считывание структур из файла
Посмотрите здесь:

Считывание и запись структур в бинарный файл C++
Считывание с файла C++
Считывание файла в массив и запись нового файла C++
Считывание из файла в массив структур C++
Заменить считывание с клавиатуры на считывание из файла C++
C++ Считывание из файла
C++ Чтение структур из файла
C++ Массив структур из файла

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 11:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru