Пожалуйста, помогите новичку понять в чем могут быть ошибки. Долго не могу разобраться.
Ошибка 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;
}
Начнем с простейшего. Ну кто же так делит?! \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. Вот с первой ошибкой просто стыдно, да? Как тому студенту-медику. Запамятовал, кто из великих медиков, как-то на практических занятиях сказал, мол, главные качества врача - внимательность и отсутствие брезгливости. Вот ведь как древние врачи проводили анализ мочи на сахар? При этом он опустил палец в баночку с мочой, вынул и облизал, и предложил повторить.
Студенты мялись, но наконец, нашелся один, повторивший подвиг профессора.
- Браво, коллега! Браво! Одно свойство врача у вас уже есть - отсутствие брезгливости. Осталась внимательность - вы не обратили внимания, что я опустил в мочу средний палец, а облизал указательный?...
Простите уж, но когда компилятор указывает на такие простые ошибки... словом, внимательность нужна не только медикам...
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости