Я еще не добавлял никаких функций в эту программу и добавил только некоторые задачи в «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, так как это прямо покажет мне решение, я хочу, чтобы оно увидело меня с человеческой точки зрения. Я ожидал, что после ввода ввода он будет печатать операторы один за другим.
ОТ: Зачем все эти глобальные переменные? Действительно ли они должны быть глобальными? Например, login_as
, который не используется функцией student
. А добавление к вашим переменным префикса std_
делает их очень похожими на вещи в пространстве имен std
.
Код не проверяет ошибку ввода. Например, if (!(cin >> std_name)) throw "input error";
для каждого ввода. Я подозреваю, что проблема в том, что вы вводите имя, которое длиннее одного char
. (Но поскольку вы не предоставили данные, которые используете, это всего лишь предположение.)
Примечания: #include <stdlib.h>
это заголовочный файл «C», он не нужен, используйте <iostream>. Использование using namespace std;
не рекомендуется, а для строк (например, имени ученика) используйте std::string
, а не char
.
И никакой ChatGPT не покажет вам простого решения... ChatGPT действительно не очень хорош в C++, он может показывать что-то похожее на C++, но часто неявно (или не столь тонко) неверно. так что не верь этому
@Eljay, спасибо, я забыл использовать строку вместо char
вы использовали тип данных char
для переменной std_name
, которая используется для хранения имени, вводимого пользователем. cin >> std_name
может сломать ваш код, если вы введете более одного символа (как упоминал @Eljay), поскольку вы пытаетесь сохранить несколько символов в переменной, которая предназначена для хранения одного символа.
Чтобы это исправить, измените тип данных std_name
на std::string
, например.
string std_name;
char*
сам по себе не может хранить строку. Им также нужно будет выделить память для строки. std::cin
не делает этого
Хорошо, спасибо. теперь меняю свой ответ только на std::string
Эти
break
выведут вас из петлиswitch
, а не из петлиwhile
.