Программа обработки файла типа запись,c++

92
21 ноября 2021, 18:50

Пожалуйста, помогите новичку понять в чем могут быть ошибки. Долго не могу разобраться.

Ошибка C2360 пропуск инициализации "middle" из-за метки "case"
Ошибка C2143 синтаксическая ошибка: отсутствие ";" перед "константа"
Ошибка C2017 недопустимая escape-последовательность
Ошибка (активно) E0007 нераспознанная лексема
#include <iostream>
#include <string>
#include <conio.h>
#include <fstream>
using namespace std;
struct student {
    int ID;
    string name;
    int year;
    int gnum;
    struct marks {
        int phys, math, inf, chem;
    }mark;
    double sb;
}student;
int main() {
    setlocale(LC_ALL, "Rus");

start: cout << "\n\t1 - Создание\n\t2 - Просмотр\n\t3 - Коррекция\n\t4 - Решение индивидуального задания\n\t5";
    ifstream fin("students.txt", ios_base::in); 
    ofstream fout("students.txt", ios::app); 
    int key;
    string a;
    int ID, scale, year;
    char name;
    cin >> key;
    switch (key) {
    case 1:
        cout << "\n\tВведите фамилия и инициалы: ";
        cin.get();
        getline(cin, student.name);
        cout << "\n\tВведите год рождения: ";
        cin >> student.year;
        cout << "\n\tВведите номер группы: ";
        cin >> student.gnum;
        cout << "\n\tОценка по физике: ";
        cin >> student.mark.phys;
        cout << "\n\tОценка по математике: ";
        cin >> student.mark.math;
        cout << "\n\tОценка по информатике: ";
        cin >> student.mark.inf;
        cout << "\n\tОценка по химии: ";
        cin >> student.mark.chem;

        int middle = student.mark.phys + student.mark.math + student.mark.inf + student.mark.chem\4;
        cout << middle;
        student.sb = (student.mark.phys + student.mark.math + student.mark.inf + student.mark.chem) / 4;
        fout <<" \n" << student.ID <<" "<< student.name << "\t" << student.year << "\t" << student.gnum << "\t" << student.mark.phys << "\t" << student.mark.math << "\t" << student.mark.inf << "\t" << student.mark.chem << "\t" << student.sb <<"\n";
        goto start;
        break;
    case 2:                    
        if (fin.is_open()) {     
            while (fin >> student.ID) {
                fin >> student.name >> student.year >> student.gnum >> student.mark.phys >> student.mark.math >> student.mark.inf >> student.mark.chem >> student.sb;
                cout << student.name << "\t" << student.year << "\t" << student.gnum << "\t" << student.mark.phys << "\t" << student.mark.math << "\t" << student.mark.inf << "\t" << student.mark.chem << "\t" << student.sb<<"\n";
            }
        }
        break;
    case 5:
        break;
    }
    _getch();
    return 0;
}
Answer 1

Начнем с простейшего. Ну кто же так делит?! \4? Делить надо так, как двумя строками ниже - /4.

Далее - внутри caseничего просто так инициализировать нельзя. В общем случае представьте сложный класс, который инициализируется в case 1, и виден в case 2 - и что будет, если вы попадаете прямо в case 2? Минуя case 1 и инициализацию? С чем работать придется?...

Варианты - вынесите объявление middle за пределы switch или поместите тело case 1 в фигурные скобки...

Впрочем, у вас эта переменная используется только для вывода, так что я бы написал

cout <<  student.mark.phys + student.mark.math + student.mark.inf + student.mark.chem/4;

и не мучился... :)

P.S. Вот с первой ошибкой просто стыдно, да? Как тому студенту-медику. Запамятовал, кто из великих медиков, как-то на практических занятиях сказал, мол, главные качества врача - внимательность и отсутствие брезгливости. Вот ведь как древние врачи проводили анализ мочи на сахар? При этом он опустил палец в баночку с мочой, вынул и облизал, и предложил повторить.
Студенты мялись, но наконец, нашелся один, повторивший подвиг профессора.
- Браво, коллега! Браво! Одно свойство врача у вас уже есть - отсутствие брезгливости. Осталась внимательность - вы не обратили внимания, что я опустил в мочу средний палец, а облизал указательный?...

Простите уж, но когда компилятор указывает на такие простые ошибки... словом, внимательность нужна не только медикам...

READ ALSO
отрицательное число в std::bitset

отрицательное число в std::bitset

Если некоторый обьект std::bitset инициализирован отрицательным числом, как вернуть истинное значение этого числа методами std::bitset? Например,...

115
Не считывает данные из базы данных SQL Qt

Не считывает данные из базы данных SQL Qt

Перекрестно создается база данных и заполняется, но вот пройти её и считать весь столбик "BarCode" почему-то не выходит

85
С++ программа для устного счета

С++ программа для устного счета

почему-то выбирает действие кроме деления почему ???

156
Как записать в вектор значения?

Как записать в вектор значения?

Как записать в вектор значение из cin?

188