Спросите имя, если неправильно спросите снова, если правильно, продолжайте идти (не работает) C++

Это мой код То, что я пытаюсь сделать здесь, - это код, который запрашивает имя (например, пароль), если имя неверное, тогда программа произносит эти 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), я получу массаж с правильным именем

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

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

5 ответов

Решение

Логика в 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");

В вашем коде:

Ваше состояние было 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;
    }

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

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;
}

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

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

continue;

за

`break;`

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

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

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

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

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

continue;

от

break;

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

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