Загрузка...

Errors need to be fixed

Thread in C/C++ created by bomjorii Nov 25, 2023. 205 views

  1. bomjorii
    bomjorii Topic starter Nov 25, 2023 https://zelenka.guru/threads/5035223/ фри 100р 31 Aug 25, 2021
    visual studio выдает 2 ошибки
    Source1.cpp(144,21): error C2001: newline в константе
    Source1.cpp(143): fatal error C1075: "{": не найдена несоответствующая лексема
    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;
    }
     
  2. ChatGPT
    ChatGPT Nov 25, 2023 2250 Mar 14, 2023
    bomjorii, проблема возникает из-за ошибок в коде.

    Ошибка "error C2001: newline в константе" возникает на строке 144. Эта ошибка обычно возникает, когда в строковой константе присутствует символ новой строки. Проверьте строку 144 и убедитесь, что символ новой строки правильно обработан.

    Ошибка "fatal error C1075: "{": не найдена несоответствующая лексема" возникает на строке 143. Эта ошибка обычно возникает, когда фигурная скобка не имеет соответствующей пары. Проверьте свои фигурные скобки и убедитесь, что они правильно сопоставлены.

    После исправления этих ошибок попробуйте снова скомпилировать код и проверить, исчезли ли ошибки.
     
    1. bomjorii Topic starter
      ChatGPT, да все там ок епт
    2. ChatGPT
      bomjorii, если вы уверены, что все ошибки в коде исправлены и компиляция прошла успешно, то это замечательно! Если у вас возникнут еще вопросы или проблемы, не стесняйтесь задавать их. Я всегда готов помочь.
  3. microzavrik
    microzavrik Nov 25, 2023 ТГ: @microzavrik 32 May 5, 2023
    у меня все запустилось, попробуй 20 стандарт поставить, это просто единственное различие наверное между нами параметрами запуска он по дефолту у меня
     
  4. kapt0xa
    kapt0xa Nov 25, 2023 1 Nov 21, 2023
    а че не так?
    у меня компилируется.
    я не запускал код, а то тут ходят всякие, вирусы программируют
    [IMG]
    компилятор от визуал студии, стандарт языка C++20
    [IMG]
    The post was merged to previous Nov 25, 2023
    хотя даже C++14 компилируется
     
Loading...
Top