Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2017, 22:43   #1
artems67
Пользователь
 
Регистрация: 17.11.2015
Сообщений: 62
Восклицание Проблема со считвание структуры из txt файла [C++]

Добрый вечер,

ТЗ:

Описать структуру Student, которая содержит поля:
  • фамилия;
  • номер группы;
  • успеваемость (массив из пяти элементов);

1. Записи должны быть упорядочены по возрастанию номера групп [+]
2. Вывод на экран студентов, если их средний балл больше 4 [+]
3. Реализовать ручной ввода и запись в файл. А так же автоматическое чтение из (этого же) файла. [-]

Код программы: (Code::Blocks)

Код:
#include <iostream>
#include <string>
#include <windows.h>
#include <fstream>
using namespace std;

//Объявляю структуру Student
struct student {
    string fio;
    int group;
    int scor[5];
};

// Сортировка по возрастанию номера группы
void Sort(student *studs, int &len) {
    for(int i = 0; i < len - 1; i++) {
        for(int j = i + 1; j < len; j++) {
            if (studs[i].group>studs[j].group) {
                student buf = studs[i];
                studs[i] = studs[j];
                studs[j] = buf;
            }
        }
    }
}

// Подсчитывает средний балл
double avg(student st) {
    double sum=0;
    for (int i=0; i<5; i++) {
        sum+=st.scor[i];
    }
    return sum/5;
}

int main() {
    setlocale(LC_ALL,"rus");
    cout<<"Введите количество студентов = ";
    int n;
    cin>>n;
    student *st=new student [n];
    cout<<"1 - ввод вручную | 2 - ввод с файла"<<endl;
    int b;
    cin>>b;
    switch(b) {
    case 1:
        if (b==1) {   // Ручной ввод списка студентов
            ofstream out("Students.txt");
            for (int i=0; i!=n; i++) {
                cout<<"Введите ФИО: ";
                cin>>st[i].fio;
                out<<st[i].fio<<ends;
                cout<<"Введите номер группы: ";
                cin>>st[i].group;
                out<< st[i].group<<ends;
                cout<<"Успеваемость: "<<endl;
                int j=0;
                do {
                    cout<<"Оценка №"<<j+1<<" ";
                    cin>>st[i].scor[j];
                    out<<st[i].scor[j];
                    j++;
                    if(j==5) {out<<endl;}
                } while(j!=5);
                out.close();
                cout<<endl;
       }
   }
      break;
    case 2: //Считывание из файла
        if (b==2) {
            ifstream in ("Students.txt");
            for (int i=0; i!=n; i++) {
                in>>st[i].fio>>st[i].group;     cout<<st[i].fio<<ends<<st[i].group<<ends;

                int j=0;
                do {
                  in>>st[i].scor[j]; cout<<st[i].scor[j];
                  j++;
                } while (j!=5);
            }
       in.close(); }
      break;
}


    cout<<endl;
    Sort (st,n);

    // Выводим студентов по возрастанию групп
    for (int i=0; i!=n; i++) {

        cout<<st[i].fio<<endl;
        cout<<st[i].group<<endl;
        for (int j=0; j!=5; j++) {
            cout<<st[i].scor[j]<<" ";
        }
        cout<<endl;

    }
    cout<<endl;

    int sum=0;
    int ind;
    int f=0;
    cout<<"Студенты средний бал >4"<<endl;  // Подсчёт среднего балла для каждого студента
    for (int i=0; i!=n; i++)
        if (avg(st[i])>4) {
            f++;
            ind=i;
            cout<<st[ind].fio<<endl;
            cout<<st[ind].group<<endl;
        }
    if (f==0) {
        cout<<"No"<<endl;
    }
    delete[]st;
    system("pause");
    return 0;
}
Проблема с записью и чтением данных из файлов. А именно с этими кусками кода:

Ручной ввод и запись в файл:

Код:
case 1:
        if (b==1) {   // Ручной ввод списка студентов
            ofstream out("Students.txt");
            for (int i=0; i!=n; i++) {
                cout<<"Введите ФИО: ";
                cin>>st[i].fio;
                out<<st[i].fio<<ends;
                cout<<"Введите номер группы: ";
                cin>>st[i].group;
                out<< st[i].group<<ends;
                cout<<"Успеваемость: "<<endl;
                int j=0;
                do {
                    cout<<"Оценка №"<<j+1<<" ";
                    cin>>st[i].scor[j];
                    out<<st[i].scor[j];
                    j++;
                    if(j==5) {out<<endl;}
                } while(j!=5);
                out.close();
                cout<<endl;
       }
   }
      break;
Проблема в том, что если указать структуру из, к примеру, 10 студентов. То тупо записывается в файл только данные об 1 студенте.

Также проблема со считыванием из файла.

Автоматическое считывание из файла:

Код:
case 2: //Считывание из файла
        if (b==2) {
            ifstream in ("Students.txt");
            for (int i=0; i!=n; i++) {
                in>>st[i].fio>>st[i].group;     cout<<st[i].fio<<ends<<st[i].group<<ends;

                int j=0;
                do {
                  in>>st[i].scor[j]; cout<<st[i].scor[j];
                  j++;
                } while (j!=5);
            }
       in.close(); }
      break;
Вроде как считывает, но тоже только 1 студента.
artems67 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с записью русского текста в .txt файла, кракозябры FleXik PHP 3 28.06.2016 08:56
Проблема с чтением структуры из файла d0lmat Общие вопросы Delphi 3 18.12.2013 11:43
Переделавание кода на считывание из файла в файл output.txt input.txt !!! airesjke Помощь студентам 0 29.05.2013 14:07
проблема из считыванием записи структуры из файла bloger Общие вопросы C/C++ 0 07.12.2011 22:25
Проблема с чтением матрицы с txt-файла в C# Денис89 Помощь студентам 5 08.09.2010 17:40