Повторение вопроса при неправильном ответе

#c #loops #if-statement

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

Вопрос:

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

 #include <iostream>
using std::cin;
using std::cout;

int main() {
  std::string answer;

  cout << "Is K before T in the alphabet ?";

  cin >> answer;

  if (answer == "y") {
    cout << "Well done!";
  }

  else {
    cout << "Try again";
  }
  

Комментарии:

1. Я бы посоветовал цикл while tutorialspoint.com/cplusplus/cpp_while_loop.htm

Ответ №1:

Вы могли бы сделать что-то подобное с помощью простой логической управляющей переменной:

 int main()
{         
    std::string answer;
    bool isCorrect = false;

    
    while(isCorrect == false)

    {   std::cout << "Is K before T in the alphabet ?";
        std::cin >> answer;
        
        if (answer == "y")
        {
            isCorrect = true;        
            std::cout << "Well done!";
        }
        else
        {
            std::cout << "Try again";
        }
    }
}
  

Комментарии:

1. Это не будет задавать вопрос снова. Вам нужно будет переместить печатную часть внутри цикла

2. ОП спросил, как повторить вопрос. Вам нужно переместить вывод вопроса внутри цикла, чтобы ответ был правильным. Также исправьте свои опечатки.

Ответ №2:

Если вы планируете задавать несколько вопросов, вы можете создать вспомогательную функцию, а затем вызывать ее для каждого вопроса:

 bool inputValidation(std::string strQuestion, std::string strAnser) {
    std::string userInput;
    std::cout << strQuestion;
    std::cin >> userInput;
    while (true) {
        if (userInput == strAnswer)) {
            return true;
        }
        else {
            std::cout << strQuestion;
            std::cin >> userInput;
        }
    }
}

int main() {
    bool correct = InputValidation("What is the answer?","42");
    correct = InputValidation("Is K before T in the alphabet?", "yes");
}
  

Затем вы можете поместить все свои вопросы и ответы в карту и использовать цикл for each для перебора каждой пары вопрос-ответ. Если вам нужно несколько выходных данных, скажем, «y» == «Yes» == «1», вы можете передать a vector<std::string> в качестве ответа.