Я пытаюсь создать систему управления библиотекой и не понимаю, почему в случае переключения также есть цикл с оператором прерывания

Я еще не добавлял никаких функций в эту программу и добавил только некоторые задачи в «1) Создание учетной записи», в то время как в этом блоке кода, когда вы вводите свое имя после нажатия клавиши ввода, он начинает бесконечный цикл даже после использования «break;» это не остановится. вот код

#include <iostream>
#include <stdlib.h>
using namespace std;


int login_as;
int i = 3;
int std_choice;
int std_deposit;

void student() {
    char std_name;
    int std_age;
    int s = 6;
    while (s != std_choice) {
        cout << "1) Create an account\n2) View balance\n3)Purchase a Book\n4)Rent a Book\n5)Return a book\n6) Login Screen" << endl;
        cin >> std_choice;
        switch (std_choice)
        {
        case 1:
            cout << "REGISTER!" << endl;
            cout << "Enter Name:\n" << endl; //after this line it starts looping and wont break//
            cin >> std_name;
            cout << "Age: \n" << endl;
            cin >> std_age;
            cout << "Please deposit 10$ as initial deposit!\n1)Yes\n2)No" << endl;
            cout << "curl qreno.de/https://www.google.com" << endl;
            cin >> std_deposit;
            break;
        
        default:
            break;
        }
    }

}


int main() {
    while (i != login_as ){
        cout << "Login as:\n1) User\n2) Librarian\n3) Exit" << endl;
        cin >> login_as;
        student();
    }
    
    return 0;
}

Я избегаю спрашивать чатгпт или PHIND, так как это прямо покажет мне решение, я хочу, чтобы оно увидело меня с человеческой точки зрения. Я ожидал, что после ввода ввода он будет печатать операторы один за другим.

Эти break выведут вас из петли switch, а не из петли while.

Scott Hunter 22.08.2024 14:26

ОТ: Зачем все эти глобальные переменные? Действительно ли они должны быть глобальными? Например, login_as, который не используется функцией student. А добавление к вашим переменным префикса std_ делает их очень похожими на вещи в пространстве имен std.

Some programmer dude 22.08.2024 14:27

Код не проверяет ошибку ввода. Например, if (!(cin >> std_name)) throw "input error"; для каждого ввода. Я подозреваю, что проблема в том, что вы вводите имя, которое длиннее одного char. (Но поскольку вы не предоставили данные, которые используете, это всего лишь предположение.)

Eljay 22.08.2024 14:29

Примечания: #include <stdlib.h> это заголовочный файл «C», он не нужен, используйте <iostream>. Использование using namespace std; не рекомендуется, а для строк (например, имени ученика) используйте std::string, а не char.

Pepijn Kramer 22.08.2024 14:33

И никакой ChatGPT не покажет вам простого решения... ChatGPT действительно не очень хорош в C++, он может показывать что-то похожее на C++, но часто неявно (или не столь тонко) неверно. так что не верь этому

Pepijn Kramer 22.08.2024 14:35

@Eljay, спасибо, я забыл использовать строку вместо char

Kanak Bodkhe 22.08.2024 14:35
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы использовали тип данных char для переменной std_name, которая используется для хранения имени, вводимого пользователем. cin >> std_name может сломать ваш код, если вы введете более одного символа (как упоминал @Eljay), поскольку вы пытаетесь сохранить несколько символов в переменной, которая предназначена для хранения одного символа.

Чтобы это исправить, измените тип данных std_name на std::string, например.

string std_name;

char* сам по себе не может хранить строку. Им также нужно будет выделить память для строки. std::cin не делает этого

463035818_is_not_an_ai 22.08.2024 15:30

Хорошо, спасибо. теперь меняю свой ответ только на std::string

timmy george 22.08.2024 15:49

Другие вопросы по теме