visual studio выдает 2 ошибки Source1.cpp(144,21): error C2001: newline в константе Source1.cpp(143): fatal error C1075: "{": не найдена несоответствующая лексема #include <iostream> #include <vector> #include <algorithm> #include <string> #include <limits> #include <sstream> using namespace std; class Student { public: string firstName; string lastName; string middleName; char gender; vector<pair<string, int>> examResults; // Предметы и их баллы int totalPoints; string birthDate; int age; // Конструктор Student(string first, string last, string middle, char g, vector<pair<string, int>> exams, int total, string birth, int a) : firstName(move(first)), lastName(move(last)), middleName(move(middle)), gender(g), examResults(move(exams)), totalPoints(total), birthDate(move(birth)), age(a) {} // Перегрузка оператора вывода friend ostream& operator<<(ostream& os, const Student& student) { os << "Фамилия: " << student.lastName << "\n"; os << "Имя: " << student.firstName << "\n"; os << "Отчество: " << student.middleName << "\n"; os << "Пол: " << student.gender << "\n"; os << "Дата рождения: " << student.birthDate << "\n"; os << "Возраст: " << student.age << "\n"; os << "Общее количество баллов: " << student.totalPoints << "\n"; os << "Экзамены и баллы:\n"; for (const auto& exam : student.examResults) { os << " " << exam.first << ": " << exam.second << "\n"; } os << "\n"; return os; } // Перегрузка оператора сравнения для сортировки friend bool operator<(const Student& student1, const Student& student2) { return student1.lastName < student2.lastName; } // Метод для проверки вхождения подстроки без учета регистра static bool containsIgnoreCase(const string& str, const string& subStr) { string lowerStr = str; transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), ::tolower); string lowerSubStr = subStr; transform(lowerSubStr.begin(), lowerSubStr.end(), lowerSubStr.begin(), ::tolower); return lowerStr.find(lowerSubStr) != string::npos; } // Метод для проверки вхождения подстроки в вектор пар (предмет, баллы) static bool containsInExams(const vector<pair<string, int>>& exams, const string& subStr) { for (const auto& exam : exams) { if (containsIgnoreCase(exam.first, subStr) || to_string(exam.second).find(subStr) != string::npos) { return true; } } return false; } // Метод для проверки вхождения подстроки в неполных значениях static bool containsIncomplete(const string& str, const string& partialValue) { return containsIgnoreCase(str, partialValue); } // Метод для проверки вхождения подстроки в вектор пар (предмет, баллы) для неполных значений static bool containsInExamsIncomplete(const vector<pair<string, int>>& exams, const string& partialValue) { for (const auto& exam : exams) { if (containsIncomplete(exam.first, partialValue) || to_string(exam.second).find(partialValue) != string::npos) { return true; } } return false; } }; class AdmissionOffice { private: vector<Student> students; public: void showAllStudents() const { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } for (const auto& student : students) { cout << student; } } void addStudent() { cin.ignore(numeric_limits<streamsize>::max(), '\n'); string firstName, lastName, middleName; char gender; vector<pair<string, int>> examResults; int totalPoints; string birthDate; int age; cout << "Введите фамилию: "; getline(cin, lastName); cout << "Введите имя: "; getline(cin, firstName); cout << "Введите отчество: "; getline(cin, middleName); do { cout << "Введите пол (М/Ж): "; cin >> gender; gender = toupper(gender); } while (gender != 'М' && gender != 'Ж'); int numExams; cout << "Введите количество предметов, которые сдавал студент: "; cin >> numExams; cin.ignore(numeric_limits<streamsize>::max(), '\n'); for (int i = 0; i < numExams; ++i) { string subject; int points; cout << "Введите название предмета: "; getline(cin, subject); cout << "Введите баллы за экзамен по " << subject << ": "; cin >> points; examResults.emplace_back(subject, points); } cout << "Введите общее количество баллов: "; cin >> totalPoints; cout << "Введите дату рождения (в формате ДД.ММ.ГГГГ): "; cin >> birthDate; cout << "Введите возраст: "; cin >> age; students.emplace_back(firstName, lastName, middleName, gender, examResults, totalPoints, birthDate, age); cout << "Новый студент успешно добавлен.\n"; } void editStudent() { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } cout << "Введите фамилию студента, данные которого вы хотите изменить: "; string lastName; cin >> lastName; auto it = find_if(students.begin(), students.end(), [&lastName](const Student& student) { return student.lastName == lastName; }); if (it != students.end()) { cout << "Текущие данные студента:\n" << *it; cout << "Введите новые данные студента:\n"; addStudent(); *it = students.back(); students.pop_back(); cout << "Данные студента успешно изменены.\n"; } else { cout << "Студент с фамилией " << lastName << " не найден.\n"; } } void sortStudents(bool ascending) { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } cout << "Выберите направление сортировки (1 - по возрастанию, 0 - по убыванию): "; int ascendingInput; cin >> ascendingInput; ascending = (ascendingInput == 1); if (ascending) { sort(students.begin(), students.end()); } else { sort(students.rbegin(), students.rend()); } cout << "Студенты отсортированы.\n"; } void searchByField(const string& fieldName) const { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } cout << "Введите значение поля " << fieldName << " для поиска: "; string searchTerm; cin.ignore(numeric_limits<streamsize>::max(), '\n'); getline(cin, searchTerm); vector<Student> result; for (const auto& student : students) { if (Student::containsIgnoreCase(student.firstName, searchTerm) || Student::containsIgnoreCase(student.lastName, searchTerm) || Student::containsIgnoreCase(student.middleName, searchTerm) || Student::containsIgnoreCase(string(1, student.gender), searchTerm) || Student::containsIgnoreCase(student.birthDate, searchTerm) || to_string(student.age).find(searchTerm) != string::npos || to_string(student.totalPoints).find(searchTerm) != string::npos || Student::containsInExams(student.examResults, searchTerm)) { result.push_back(student); } } if (!result.empty()) { cout << "Найденные студенты:\n"; for (const auto& student : result) { cout << student; } } else { cout << "Студенты с заданным значением в поле " << fieldName << " не найдены.\n"; } } void searchByMultipleFields() const { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } cout << "Введите значения полей для поиска (через пробел): "; string searchTerms; cin.ignore(numeric_limits<streamsize>::max(), '\n'); getline(cin, searchTerms); vector<string> terms; stringstream ss(searchTerms); string term; while (ss >> term) { terms.push_back(term); } vector<Student> result; for (const auto& student : students) { bool match = true; for (const auto& term : terms) { if (!(Student::containsIgnoreCase(student.firstName, term) || Student::containsIgnoreCase(student.lastName, term) || Student::containsIgnoreCase(student.middleName, term) || Student::containsIgnoreCase(string(1, student.gender), term) || Student::containsIgnoreCase(student.birthDate, term) || to_string(student.age).find(term) != string::npos || to_string(student.totalPoints).find(term) != string::npos || Student::containsInExams(student.examResults, term))) { match = false; break; } } if (match) { result.push_back(student); } } if (!result.empty()) { cout << "Найденные студенты:\n"; for (const auto& student : result) { cout << student; } } else { cout << "Студенты с заданными значениями полей не найдены.\n"; } } void searchByIncompleteValue() const { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } cout << "Введите часть значения для поиска: "; string partialValue; cin.ignore(numeric_limits<streamsize>::max(), '\n'); getline(cin, partialValue); vector<Student> result; for (const auto& student : students) { if (Student::containsIncomplete(student.firstName, partialValue) || Student::containsIncomplete(student.lastName, partialValue) || Student::containsIncomplete(student.middleName, partialValue) || Student::containsIncomplete(string(1, student.gender), partialValue) || Student::containsIncomplete(student.birthDate, partialValue) || to_string(student.age).find(partialValue) != string::npos || to_string(student.totalPoints).find(partialValue) != string::npos || Student::containsInExamsIncomplete(student.examResults, partialValue)) { result.push_back(student); } } if (!result.empty()) { cout << "Найденные студенты:\n"; for (const auto& student : result) { cout << student; } } else { cout << "Студенты с заданным значением не найдены.\n"; } } static bool containsIgnoreCase(const string& str, const string& subStr) { string lowerStr = str; transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), ::tolower); string lowerSubStr = subStr; transform(lowerSubStr.begin(), lowerSubStr.end(), lowerSubStr.begin(), ::tolower); return lowerStr.find(lowerSubStr) != string::npos; } static bool containsInExams(const vector<pair<string, int>>& exams, const string& subStr) { for (const auto& exam : exams) { if (containsIgnoreCase(exam.first, subStr) || to_string(exam.second).find(subStr) != string::npos) { return true; } } return false; } static bool containsIncomplete(const string& str, const string& partialValue) { return containsIgnoreCase(str, partialValue); } static bool containsInExamsIncomplete(const vector<pair<string, int>>& exams, const string& partialValue) { for (const auto& exam : exams) { if (containsIncomplete(exam.first, partialValue) || to_string(exam.second).find(partialValue) != string::npos) { return true; } } return false; } }; int main() { setlocale(LC_ALL, "Russian"); AdmissionOffice admissionOffice; int choice; do { cout << "\nМеню:\n"; cout << "1. Показать всех студентов\n"; cout << "2. Добавить студента\n"; cout << "3. Изменить данные студента\n"; cout << "4. Сортировать студентов\n"; cout << "5. Поиск по полю\n"; cout << "6. Поиск по нескольким полям\n"; cout << "7. Поиск по части значения\n"; cout << "0. Выйти\n"; cout << "Выберите действие: "; cin >> choice; string fieldName; switch(choice) { case 1: admissionOffice.showAllStudents(); break; case 2: admissionOffice.addStudent(); break; case 3: admissionOffice.editStudent(); break; case 4: cout << "Выберите направление сортировки (1 - по возрастанию, 0 - по убыванию): "; int ascending; cin >> ascending; admissionOffice.sortStudents(ascending == 1); break; case 5: cout << "Введите поле для поиска: "; cin >> fieldName; admissionOffice.searchByField(fieldName); break; case 6: admissionOffice.searchByMultipleFields(); break; case 7: admissionOffice.searchByIncompleteValue(); break; case 0: cout << "Выход.\n"; break; default: cout << "Неверный ввод. Попробуйте еще раз.\n"; break; } } while (choice != 0); return 0; } C #include <iostream> #include <vector> #include <algorithm> #include <string> #include <limits> #include <sstream> using namespace std; class Student { public: string firstName; string lastName; string middleName; char gender; vector<pair<string, int>> examResults; // Предметы и их баллы int totalPoints; string birthDate; int age; // Конструктор Student(string first, string last, string middle, char g, vector<pair<string, int>> exams, int total, string birth, int a) : firstName(move(first)), lastName(move(last)), middleName(move(middle)), gender(g), examResults(move(exams)), totalPoints(total), birthDate(move(birth)), age(a) {} // Перегрузка оператора вывода friend ostream& operator<<(ostream& os, const Student& student) { os << "Фамилия: " << student.lastName << "\n"; os << "Имя: " << student.firstName << "\n"; os << "Отчество: " << student.middleName << "\n"; os << "Пол: " << student.gender << "\n"; os << "Дата рождения: " << student.birthDate << "\n"; os << "Возраст: " << student.age << "\n"; os << "Общее количество баллов: " << student.totalPoints << "\n"; os << "Экзамены и баллы:\n"; for (const auto& exam : student.examResults) { os << " " << exam.first << ": " << exam.second << "\n"; } os << "\n"; return os; } // Перегрузка оператора сравнения для сортировки friend bool operator<(const Student& student1, const Student& student2) { return student1.lastName < student2.lastName; } // Метод для проверки вхождения подстроки без учета регистра static bool containsIgnoreCase(const string& str, const string& subStr) { string lowerStr = str; transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), ::tolower); string lowerSubStr = subStr; transform(lowerSubStr.begin(), lowerSubStr.end(), lowerSubStr.begin(), ::tolower); return lowerStr.find(lowerSubStr) != string::npos; } // Метод для проверки вхождения подстроки в вектор пар (предмет, баллы) static bool containsInExams(const vector<pair<string, int>>& exams, const string& subStr) { for (const auto& exam : exams) { if (containsIgnoreCase(exam.first, subStr) || to_string(exam.second).find(subStr) != string::npos) { return true; } } return false; } // Метод для проверки вхождения подстроки в неполных значениях static bool containsIncomplete(const string& str, const string& partialValue) { return containsIgnoreCase(str, partialValue); } // Метод для проверки вхождения подстроки в вектор пар (предмет, баллы) для неполных значений static bool containsInExamsIncomplete(const vector<pair<string, int>>& exams, const string& partialValue) { for (const auto& exam : exams) { if (containsIncomplete(exam.first, partialValue) || to_string(exam.second).find(partialValue) != string::npos) { return true; } } return false; } }; class AdmissionOffice { private: vector<Student> students; public: void showAllStudents() const { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } for (const auto& student : students) { cout << student; } } void addStudent() { cin.ignore(numeric_limits<streamsize>::max(), '\n'); string firstName, lastName, middleName; char gender; vector<pair<string, int>> examResults; int totalPoints; string birthDate; int age; cout << "Введите фамилию: "; getline(cin, lastName); cout << "Введите имя: "; getline(cin, firstName); cout << "Введите отчество: "; getline(cin, middleName); do { cout << "Введите пол (М/Ж): "; cin >> gender; gender = toupper(gender); } while (gender != 'М' && gender != 'Ж'); int numExams; cout << "Введите количество предметов, которые сдавал студент: "; cin >> numExams; cin.ignore(numeric_limits<streamsize>::max(), '\n'); for (int i = 0; i < numExams; ++i) { string subject; int points; cout << "Введите название предмета: "; getline(cin, subject); cout << "Введите баллы за экзамен по " << subject << ": "; cin >> points; examResults.emplace_back(subject, points); } cout << "Введите общее количество баллов: "; cin >> totalPoints; cout << "Введите дату рождения (в формате ДД.ММ.ГГГГ): "; cin >> birthDate; cout << "Введите возраст: "; cin >> age; students.emplace_back(firstName, lastName, middleName, gender, examResults, totalPoints, birthDate, age); cout << "Новый студент успешно добавлен.\n"; } void editStudent() { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } cout << "Введите фамилию студента, данные которого вы хотите изменить: "; string lastName; cin >> lastName; auto it = find_if(students.begin(), students.end(), [&lastName](const Student& student) { return student.lastName == lastName; }); if (it != students.end()) { cout << "Текущие данные студента:\n" << *it; cout << "Введите новые данные студента:\n"; addStudent(); *it = students.back(); students.pop_back(); cout << "Данные студента успешно изменены.\n"; } else { cout << "Студент с фамилией " << lastName << " не найден.\n"; } } void sortStudents(bool ascending) { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } cout << "Выберите направление сортировки (1 - по возрастанию, 0 - по убыванию): "; int ascendingInput; cin >> ascendingInput; ascending = (ascendingInput == 1); if (ascending) { sort(students.begin(), students.end()); } else { sort(students.rbegin(), students.rend()); } cout << "Студенты отсортированы.\n"; } void searchByField(const string& fieldName) const { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } cout << "Введите значение поля " << fieldName << " для поиска: "; string searchTerm; cin.ignore(numeric_limits<streamsize>::max(), '\n'); getline(cin, searchTerm); vector<Student> result; for (const auto& student : students) { if (Student::containsIgnoreCase(student.firstName, searchTerm) || Student::containsIgnoreCase(student.lastName, searchTerm) || Student::containsIgnoreCase(student.middleName, searchTerm) || Student::containsIgnoreCase(string(1, student.gender), searchTerm) || Student::containsIgnoreCase(student.birthDate, searchTerm) || to_string(student.age).find(searchTerm) != string::npos || to_string(student.totalPoints).find(searchTerm) != string::npos || Student::containsInExams(student.examResults, searchTerm)) { result.push_back(student); } } if (!result.empty()) { cout << "Найденные студенты:\n"; for (const auto& student : result) { cout << student; } } else { cout << "Студенты с заданным значением в поле " << fieldName << " не найдены.\n"; } } void searchByMultipleFields() const { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } cout << "Введите значения полей для поиска (через пробел): "; string searchTerms; cin.ignore(numeric_limits<streamsize>::max(), '\n'); getline(cin, searchTerms); vector<string> terms; stringstream ss(searchTerms); string term; while (ss >> term) { terms.push_back(term); } vector<Student> result; for (const auto& student : students) { bool match = true; for (const auto& term : terms) { if (!(Student::containsIgnoreCase(student.firstName, term) || Student::containsIgnoreCase(student.lastName, term) || Student::containsIgnoreCase(student.middleName, term) || Student::containsIgnoreCase(string(1, student.gender), term) || Student::containsIgnoreCase(student.birthDate, term) || to_string(student.age).find(term) != string::npos || to_string(student.totalPoints).find(term) != string::npos || Student::containsInExams(student.examResults, term))) { match = false; break; } } if (match) { result.push_back(student); } } if (!result.empty()) { cout << "Найденные студенты:\n"; for (const auto& student : result) { cout << student; } } else { cout << "Студенты с заданными значениями полей не найдены.\n"; } } void searchByIncompleteValue() const { if (students.empty()) { cout << "База данных студентов пуста.\n"; return; } cout << "Введите часть значения для поиска: "; string partialValue; cin.ignore(numeric_limits<streamsize>::max(), '\n'); getline(cin, partialValue); vector<Student> result; for (const auto& student : students) { if (Student::containsIncomplete(student.firstName, partialValue) || Student::containsIncomplete(student.lastName, partialValue) || Student::containsIncomplete(student.middleName, partialValue) || Student::containsIncomplete(string(1, student.gender), partialValue) || Student::containsIncomplete(student.birthDate, partialValue) || to_string(student.age).find(partialValue) != string::npos || to_string(student.totalPoints).find(partialValue) != string::npos || Student::containsInExamsIncomplete(student.examResults, partialValue)) { result.push_back(student); } } if (!result.empty()) { cout << "Найденные студенты:\n"; for (const auto& student : result) { cout << student; } } else { cout << "Студенты с заданным значением не найдены.\n"; } } static bool containsIgnoreCase(const string& str, const string& subStr) { string lowerStr = str; transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), ::tolower); string lowerSubStr = subStr; transform(lowerSubStr.begin(), lowerSubStr.end(), lowerSubStr.begin(), ::tolower); return lowerStr.find(lowerSubStr) != string::npos; } static bool containsInExams(const vector<pair<string, int>>& exams, const string& subStr) { for (const auto& exam : exams) { if (containsIgnoreCase(exam.first, subStr) || to_string(exam.second).find(subStr) != string::npos) { return true; } } return false; } static bool containsIncomplete(const string& str, const string& partialValue) { return containsIgnoreCase(str, partialValue); } static bool containsInExamsIncomplete(const vector<pair<string, int>>& exams, const string& partialValue) { for (const auto& exam : exams) { if (containsIncomplete(exam.first, partialValue) || to_string(exam.second).find(partialValue) != string::npos) { return true; } } return false; } }; int main() { setlocale(LC_ALL, "Russian"); AdmissionOffice admissionOffice; int choice; do { cout << "\nМеню:\n"; cout << "1. Показать всех студентов\n"; cout << "2. Добавить студента\n"; cout << "3. Изменить данные студента\n"; cout << "4. Сортировать студентов\n"; cout << "5. Поиск по полю\n"; cout << "6. Поиск по нескольким полям\n"; cout << "7. Поиск по части значения\n"; cout << "0. Выйти\n"; cout << "Выберите действие: "; cin >> choice; string fieldName; switch(choice) { case 1: admissionOffice.showAllStudents(); break; case 2: admissionOffice.addStudent(); break; case 3: admissionOffice.editStudent(); break; case 4: cout << "Выберите направление сортировки (1 - по возрастанию, 0 - по убыванию): "; int ascending; cin >> ascending; admissionOffice.sortStudents(ascending == 1); break; case 5: cout << "Введите поле для поиска: "; cin >> fieldName; admissionOffice.searchByField(fieldName); break; case 6: admissionOffice.searchByMultipleFields(); break; case 7: admissionOffice.searchByIncompleteValue(); break; case 0: cout << "Выход.\n"; break; default: cout << "Неверный ввод. Попробуйте еще раз.\n"; break; } } while (choice != 0); return 0; }
bomjorii, проблема возникает из-за ошибок в коде. Ошибка "error C2001: newline в константе" возникает на строке 144. Эта ошибка обычно возникает, когда в строковой константе присутствует символ новой строки. Проверьте строку 144 и убедитесь, что символ новой строки правильно обработан. Ошибка "fatal error C1075: "{": не найдена несоответствующая лексема" возникает на строке 143. Эта ошибка обычно возникает, когда фигурная скобка не имеет соответствующей пары. Проверьте свои фигурные скобки и убедитесь, что они правильно сопоставлены. После исправления этих ошибок попробуйте снова скомпилировать код и проверить, исчезли ли ошибки.
bomjorii, если вы уверены, что все ошибки в коде исправлены и компиляция прошла успешно, то это замечательно! Если у вас возникнут еще вопросы или проблемы, не стесняйтесь задавать их. Я всегда готов помочь.
у меня все запустилось, попробуй 20 стандарт поставить, это просто единственное различие наверное между нами параметрами запуска он по дефолту у меня
а че не так? у меня компилируется. я не запускал код, а то тут ходят всякие, вирусы программируют компилятор от визуал студии, стандарт языка C++20 The post was merged to previous Nov 25, 2023 хотя даже C++14 компилируется