строка — спросите имя, если неправильно, спросите снова, если правильно, продолжайте идти (не работает) Переполнение стека

Это мой код То, что я пытаюсь сделать здесь, — это код, который запрашивает имя (например, пароль), если имя неверное, тогда программа произносит эти 3 сообщения об ошибках и снова спрашивает имя, пока одно из 2 имен не занесено в белый список. дано, тогда просто продолжайте идти с кодом.

int main(void)
{
setlocale(LC_ALL, "Portuguese");
string Name = "";
cout << "Whats your name dude ?" << endl;
cin >> Name;

if (Name == "ighor" ||
Name == "indio")
{
cout << "Welcome friend =D" << endl;
system("pause");
system("cls");
}
else
{
do
{
cout << "Sorry, wrong name =[" << endl;
system("pause");
system("cls");
cout << "I'll give you another chance =]" << endl;
system("pause");
system("cls");
cout << "Write your name again" << endl;
cin >> Name;

if (Name == "ighor" ||
Name == "indio")
{
continue;
}

}   while (Name != "ighor" ||
Name != "indio");}

cout << "Whats up" << Name << endl;
system("pause");
system("cls");
return 0;

}

Мои тесты с этим кодом дали мне это:
Если я добавлю имя из белого списка (indio или ighor), я получу массаж с правильным именем

«Добро пожаловать, друг =]».

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

0

Решение

Логика в do-while петля несовершенна. Вместо

            continue;

тебе нужно

            break;

continue; продолжается со следующей итерации цикла. break; разрывает петлю.

Так же while неверная логика высказываний Вам необходимо использовать:

while (Name != "ighor" &&  Name != "indio");
^^^ not ||

Сказав это, вам нужна только одна проверка, а не обе.

Ты можешь использовать:

do
{
...

if (Name == "ighor" || Name == "indio")
{
break;
}

} while (true);

или же

do
{
...

}  while (Name != "ighor" && Name != "indio");
0

Другие решения

Попробуй это:

int main() {

string name;
cout << "Whats your name dude ?" << endl;
cin >> name;

while (!(name == "ighor" || name == "indio")) {
cout << "Sorry, wrong name =[" << endl;
system("pause");
system("cls");
cout << "I'll give you another chance =]" << endl;
system("pause");
system("cls");
cout << "Write your name again" << endl;
cin >> name;
}

cout << "Whats up " << name << endl;
system("pause");
system("cls");
return 0;
}

это коротко, чище, более выразительно и это тоже работает ..

0

В вашем коде:

Ваше состояние было while (Name != "ighor" || Name != "indio"); что означает, что любое из этих двух условий true тогда цикл продолжит свою работу. Если ваш ввод "indio" тогда первое условие стало true,

В моем коде:

while (Name != "ighor" && Name != "indio");что означает, что эти два условия должны быть true если один из них стал false тогда цикл прекратит свою работу. Теперь, если ваш вклад "indio" это условие стало false и твой цикл остановится.

Чтобы узнать больше о continue а также break заявление прочитано этот а также этот.

Попробуй это:

int main(void)
{
setlocale(LC_ALL, "Portuguese");
string Name = "";
cout << "Whats your name dude ?" << endl;
cin >> Name;

if (Name == "ighor" ||
Name == "indio")
{
cout << "Welcome friend =D" << endl;
system("pause");
system("cls");
}
else
{
do
{
cout << "Sorry, wrong name =[" << endl;
system("pause");
system("cls");
cout << "I'll give you another chance =]" << endl;
//system("pause");
system("cls");
cout << "Write your name again" << endl;
cin >> Name;

if (Name == "ighor" ||
Name == "indio")
{
continue;
}

}   while (Name != "ighor" &&
Name != "indio");}

cout << "Whats up" << Name << endl;
system("pause");
system("cls");
return 0;
}
0

Спасибо за все ответы, которые я изменил

continue;

за

`break;`

и все заработало отлично =)
Но поскольку код был слишком запутанным, я могу немного изучить другие советы, которые вы, ребята, дали мне, чтобы я мог сделать его чище = D
У меня просто еще одно сомнение с этим куском кода

cin >> RPI;
if (RPI == "Sim"||RPI == "sim"||RPI == "vou"||RPI == "Vou")

Здесь я хотел «проверить» ответ и сделать что-нибудь, если бы я был «Сим» или «Вау», что означает («Да» и «Я буду», но в любом случае)
Я думаю, что я могу использовать то, что вы, ребята, сказали мне о замене «II» для «&&«Так что это делает условие правильно.
Если был какой-то способ или команда, так что для этого ответа не нужно различать прописные и строчные буквы, поэтому мне не нужно было указывать оба способа, которые может написать человек, это также поможет.
Вот только учебный код, только для изучения предлагаю

Это был первый раз, когда я отправил сообщение и был действительно удивлен тем, что получил много ответов, и это было слишком быстро, спасибо всем за поддержку.
Вы, ребята, правите.
Хорошая кодировка.

0

Пожалуйста, сделайте отступ в своем коде правильно.
Попробуйте заменить

continue;

от

break;

Оператор continue снова проходит цикл, и вам нужно выйти из него. Дайте мне знать, если это работает, так как я не могу проверить прямо сейчас.

-1
По вопросам рекламы [email protected]