Пожалуйста, помогите новичку понять в чем могут быть ошибки. Долго не могу разобраться.
Ошибка 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. Вот с первой ошибкой просто стыдно, да? Как тому студенту-медику. Запамятовал, кто из великих медиков, как-то на практических занятиях сказал, мол, главные качества врача - внимательность и отсутствие брезгливости. Вот ведь как древние врачи проводили анализ мочи на сахар? При этом он опустил палец в баночку с мочой, вынул и облизал, и предложил повторить.
Студенты мялись, но наконец, нашелся один, повторивший подвиг профессора.
- Браво, коллега! Браво! Одно свойство врача у вас уже есть - отсутствие брезгливости. Осталась внимательность - вы не обратили внимания, что я опустил в мочу средний палец, а облизал указательный?...
Простите уж, но когда компилятор указывает на такие простые ошибки... словом, внимательность нужна не только медикам...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Если некоторый обьект std::bitset инициализирован отрицательным числом, как вернуть истинное значение этого числа методами std::bitset? Например,...
Перекрестно создается база данных и заполняется, но вот пройти её и считать весь столбик "BarCode" почему-то не выходит