Это мой код То, что я пытаюсь сделать здесь, — это код, который запрашивает имя (например, пароль), если имя неверное, тогда программа произносит эти 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), я получу массаж с правильным именем
«Добро пожаловать, друг =]».
Если я введу неправильное имя, я получу массаж с неправильным именем, хорошо, тогда меня просят ввести имя снова, я помещаю одно из имен, занесенных в белый список, и оно продолжает говорить, что это неправильное имя, также неправильные имена показать неправильное имя сообщения.
Логика в 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");
Попробуй это:
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;
}
это коротко, чище, более выразительно и это тоже работает ..
В вашем коде:
Ваше состояние было 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;
}
Спасибо за все ответы, которые я изменил
continue;
за
`break;`
и все заработало отлично =)
Но поскольку код был слишком запутанным, я могу немного изучить другие советы, которые вы, ребята, дали мне, чтобы я мог сделать его чище = D
У меня просто еще одно сомнение с этим куском кода
cin >> RPI;
if (RPI == "Sim"||RPI == "sim"||RPI == "vou"||RPI == "Vou")
Здесь я хотел «проверить» ответ и сделать что-нибудь, если бы я был «Сим» или «Вау», что означает («Да» и «Я буду», но в любом случае)
Я думаю, что я могу использовать то, что вы, ребята, сказали мне о замене «II» для «&&«Так что это делает условие правильно.
Если был какой-то способ или команда, так что для этого ответа не нужно различать прописные и строчные буквы, поэтому мне не нужно было указывать оба способа, которые может написать человек, это также поможет.
Вот только учебный код, только для изучения предлагаю
Это был первый раз, когда я отправил сообщение и был действительно удивлен тем, что получил много ответов, и это было слишком быстро, спасибо всем за поддержку.
Вы, ребята, правите.
Хорошая кодировка.
Пожалуйста, сделайте отступ в своем коде правильно.
Попробуйте заменить
continue;
от
break;
Оператор continue снова проходит цикл, и вам нужно выйти из него. Дайте мне знать, если это работает, так как я не могу проверить прямо сейчас.