C ++ If заявление, повторяющееся от else - PullRequest
0 голосов
/ 05 октября 2018

Я только начал C ++ в университете, поэтому я решил попытаться сделать классический «магазинный проект» с использованием C ++.

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

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

Вот фрагмент кода:

cin >> help;
if (help == "Yes" || help == "yes")
{
    cout << "These are out current sections that you are able to browse:" << endl;
    cout << "-Offers and Deals (1) \n-Computing (2) \n-Console (3) \n-Audio (4) \n-Electronic Displays (5) \n-Cabling (6) \n-General Accessories (7)" << endl;
}
else if (help == "No" || help == "no")
{
    cout << "You have chosen not to look at our browsing list." << endl;
}
else
{
    cout << "Sorry the system does not understand what you have entered. \n Please use full English (Yes/No)." << endl;

}

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

Заранее благодарен.

1 Ответ

0 голосов
/ 05 октября 2018

без использования цикла, или я должен использовать цикл?

Есть способы достичь этого без использования цикла, но цикл - это именно та конструкция, которая позволяет вам повторить блок кода, пока условие истинно.

Это явно выражает ваше намерение и достигает желаемого результата.

void menu()
{
    while (true)
    {
        int i; std::cin >> i;

             if (i == 0) { action0(); }
        else if (i == 1) { action1(); }
        else if (i == 2) { break; /* Return to caller */ }
        else             { /* Invalid selection, retry */ }
    }
}

Еще один разумныйВ решении используется рекурсия .Пример:

void menu()
{
    int i; std::cin >> i;

         if (i == 0) { action0(); }
    else if (i == 1) { action1(); }
    else if (i == 2) { return; /* Return to caller */ }
    else             { menu(); /* Invalid selection, retry */ }
}

Однако это может иметь несколько недостатков по сравнению с циклом.Цитируя Франсуа Андриё из комментариев:

Рекурсия - разумная альтернатива, если циклы не могут быть использованы, но стоит упомянуть о недостатках.Например, может быть ограничение на количество повторений, если оптимизация хвостового вызова не вступает в игру.Если это так, то у вас есть скрытый цикл.Также стоит упомянуть, что вы не можете сделать это с main.Многие новички совершают ошибку, когда впервые обнаруживают рекурсию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...