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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ функции рекурсия (Введить первое, третье, пятое и т.д. с вивединих чисел. Завершальний ноль выводить не над) http://www.cyberforum.ru/cpp-beginners/thread870924.html
Дана последовательность натуральных чисел завершающийся числом 0.Введить первое, третье, пятое и т.д. с вивединих чисел. Завершальний ноль выводить не надо.
C++ В последовательности из действительных чисел найти два члена, среднее арифметическое которых ближе всего к x Текст задания ниже: Даны действительные числа x, y1,...,y25. В последовательности y1,...,y25 найти два члена, среднее арифметическое которых ближе всего к x. http://www.cyberforum.ru/cpp-beginners/thread870922.html
Построить пересечение последовательностей C++
Дано число n и целые числа. Nastik23, оформите тему в соответствии с правилами форума: текстовые задания набирайте от руки
C++ Однокруговой турнир с календарем проведения соревнований
Весь семестр изучали списки и классы. Не могу разобраться как именно представить эти классы. Создать класс команд, в котором будет класс участников? Тогда как представить даты и результаты соревнований? Пожалуйста, помогите с логикой хранения этих данных. Дальше постараюсь сам. Проводится однокруговой турнир по одному из видов спорта (хоккей, футбол, волейбол, шахматы и т.д.) для N участников...
C++ Массивы в CUDA http://www.cyberforum.ru/cpp-beginners/thread870911.html
выделение памяти на CPU для 2-мерного массива примерно выглядит так A=(float **)malloc(n*sizeof(float*)); for (int i=0; i<n;>=(float *)malloc(n*sizeof(float)); Как это будет выглядеть для GPU на языке CUDA и что лучше использовать cudaMalloc или cudamallocpitch ? P.S. желательно примером как у меня
C++ Наследование классов Задание: Создать класс базовый класс «квадрат». Элементы класса (поля имеют статус доступа protected): поле, задающее длину стороны; конструктор для инициализации поля; метод для вычисления площади квадрата и ее печати. Создать производный класс «куб». Элементы класса: конструктор для инициализации поля; подробнее

Показать сообщение отдельно
Bramme
0 / 0 / 0
Регистрация: 11.10.2012
Сообщений: 60

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

19.05.2013, 21:50. Просмотров 369. Ответов 0
Метки (Все метки)

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

Укажите, пожалуйста, на ошибку.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru