@dzzaad

Почему в while оценку последнего человека он выводит еще раз и с новой строки?

Код
#include <iostream>
#include <Windows.h>
#include <fstream>
using namespace std;
struct Student
{
    char firstname[20], name[20], patronymic[20];
    int math, physics, drawing, chemistry, copromat;
};
int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    ofstream zapis;
    zapis.open("first_file.txt", ios_base::out | ios_base::trunc | ios_base::binary);
    struct Student cheliki;
    int count_students, i = 1;
    float average_mark, count_physics_mark = 0.0;
    cout << "Введите количество учеников: ";
    cin >> count_students;
    while (i <= count_students) {
        cout << "Введите фамилию " << i << "-ого ученика: ";
        cin >> cheliki.firstname;
        cout << "Введите имя " << i << "-ого ученика: ";
        cin >> cheliki.name;
        cout << "Введите отчество " << i << "-ого ученика: ";
        cin >> cheliki.patronymic;
        cout << "Введите оценку " << i << "-ого ученика по математике: ";
        cin >> cheliki.math;
        cout << "Введите оценку " << i << "-ого ученика по физике: ";
        cin >> cheliki.physics;
        count_physics_mark += cheliki.physics;
        cout << "Введите оценку " << i << "-ого ученика по черчению: ";
        cin >> cheliki.drawing;
        cout << "Введите оценку " << i << "-ого ученика по химии: ";
        cin >> cheliki.chemistry;
        cout << "Введите оценку " << i << "-ого ученика по сопромату: ";
        cin >> cheliki.copromat;
        i++;
        zapis << cheliki.firstname << " " << cheliki.name << " " << cheliki.patronymic << " " <<  cheliki.physics << endl;
    }
    ifstream rFile;
    rFile.open("first_file.txt", ios_base::in | ios_base::binary);
    while (!rFile.eof()) {
        rFile >> cheliki.firstname >> cheliki.name >> cheliki.patronymic >> cheliki.physics;
        cout << cheliki.firstname << cheliki.physics << ' ' << endl;
    }
    average_mark = count_physics_mark / count_students;
    cout << "Средний балл группы по физике = " << average_mark;
    rFile.close();
    return 0;
}

6248639e976a3039622039.png
  • Вопрос задан
  • 126 просмотров
Решения вопроса 1
zapis << cheliki.firstname << " " << cheliki.name << " " << cheliki.patronymic << " " << cheliki.physics << endl;
при такой записи (endl в конце) файл всегда будет с пустой строкой в конце. Соответственно при выводе из файла цикл делается на 1 раз больше чем надо.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы