как мне создать цикл возврата к исходному вопросу с помощью if или else?

#c #loops #if-statement

#c #циклы #if-оператор

Вопрос:

Я пытаюсь выяснить, вышел ли введенный пользователем из диапазона 1-10, чтобы переформулировать исходный вопрос

 #include <iostream>

int main() {
  int mood;
std::cout << "on a scale of 1-10 how are you? 1=worst 10=best ";
std::cin >> mood;
if ((mood<1)||(mood>10))
{
std::cout << "InVaID eNtry (UR fEElinGS ArE StiLL valID)";

}
else 
{std::cout << "I am feeling like a(n) " << mood;
}
  return 0;
}
  

Ответ №1:

Вы можете поместить его в while(true) цикл и выйти из цикла, как только получите действительный ввод:

 #include <iostream>

int main() {
    int mood;
    while (true) {
        std::cout << "on a scale of 1-10 how are you? 1=worst 10=best ";
        std::cin >> mood;
        if ((mood < 1) || (mood > 10)) {
            std::cout << "InVaID eNtry (UR fEElinGS ArE StiLL valID)n";
        }
        else {
            std::cout << "I am feeling like a(n) " << mood << "n";
            break;
        }
    }
    return 0;
}
  

Ответ №2:

Вы можете использовать continue для перезапуска цикла при недопустимом вводе

 #include <iostream>

int main() {
    
    int mood = -1;

    while (true)
    {
        std::cout << "on a scale of 1-10 how are you? 1=worst 10=best ";
        std::cin >> mood;
        if ((mood<1)||(mood>10))
        {
            std::cout << "InVaID eNtry (UR fEElinGS ArE StiLL valID)";
            continue;  // restart loop
        }
        std::cout << "I am feeling like a(n) " << mood;
        return 0;        
    }
}
  

Ответ №3:

 You should ideally use a loop to achieve this but if you really want to do it using if-else use goto  https://www.programiz.com/cpp-programming/goto

implementation using goto:

    #include <iostream>
        int main() {
        int mood;
        jump:
        std::cout << "on a scale of 1-10 how are you? 1=worst 10=best ";
        std::cin >> mood;
        if ((mood<1)||(mood>10)){
             std::cout << "InVaID eNtry (UR fEElinGS ArE StiLL valID)";
             goto jump;
        }else {
            std::cout << "I am feeling like a(n) " << mood;
        }
        return 0;
    }



Implementation using loop

#include <iostream>

int main() {
    int mood;
    do{
    std::cout << "on a scale of 1-10 how are you? 1=worst 10=best ";
    std::cin >> mood;
    if ((mood<1)||(mood>10)){
         std::cout << "InVaID eNtry (UR fEElinGS ArE StiLL valID)";
    }else {
        std::cout << "I am feeling like a(n) " << mood;
    }
    while((mood<1)||(mood>10))
    return 0;
}
  

Ответ №4:

вы можете использовать рекурсивный метод без изменения вашего кода, вот пример для него

     #include <iostream>

    int main() {
        int mood;
        std::cout << "non a scale of 1-10 how are you? 1=worst 10=best ";
        std::cin >> mood;
        if ((mood<1)||(mood>10))
        {
            std::cout << "InVaID eNtry (UR fEElinGS ArE StiLL valID)";
            main(); // here is recursive method
        }
        else
        {
            std::cout << "I am feeling like a(n) " << mood;
        }
          return 0;
        }
  

рекурсивный метод вызывал сам function, поэтому может запускать вашу функцию с begin снова и снова, не используя цикл или что-то еще.

Ответ №5:

вы можете использовать while (true) и return 0 :

 #include <iosream>

int mood;

int main() {
    while (true) {
          std::cout << "on a scale of 1-10 how are you? 1=worst 10=best ";
          cin >> mood;
          if (mood <= 10 amp;amp; mood >= 1) {
              std::cout << "I am feeling like a(n) " << mood;
              return 0;
          }
          std::cout << "InVaID eNtry (UR fEElinGS ArE StiLL valID)" << endl;
    }
}