您好我不知道如何让用户选择我在代码中提供的选项之一,如果他们选择了未给出的选项,那么我希望程序返回到最后一点。
这是我的代码
#include <iostream>
#include <string>
using namespace std;
int main()
{
//Welcoming message with date//
cout << "Welcome to FILM Screen Cinema" << endl;
cout << endl;
cout << "ENTER STAFF/OPERATOR'S NAME: ";
string name;
cin >> name;
cout << endl;
cout << "ENTER DATE:";
string date;
cin >> date;
cout << endl;
cout << "CHOOSE A MOVIE THAT IS SCREENING TODAY:" << endl;
cout << "[1] Deadpool" << endl << "[2] Goosebumps" <<endl;
string input;
cin >> input;
}
如果它选择一部电影,我希望用户输入1或2作为选择,但是如果他们输入任何其他数字,那么它应该说无效并允许他们再次输入1或2。提前谢谢。
答案 0 :(得分:0)
我怀疑您希望每个std::cin >> XXX
调用实际查询用户输入。目前情况并非如此,例如当用户键入&#34; John Smith&#34;作为运营商的名称,name
将设置为&#34; John&#34;,以下std::cin >> date
重新使用其余部分&#34; Smith&#34;而不是再次要求输入。
要解决此问题,您可以使用std::getline
。
因此,代码的第一部分应替换为
std::cout << '\n';
std::cout << "ENTER STAFF/OPERATOR'S NAME: ";
std::string name;
std::getline(std::cin, name);
std::cout << '\n';
std::cout << "ENTER DATE:";
std::string date;
std::getline(std::cin, date);
std::cout << '\n';
对于验证输入的部分也是如此。现在,您只需要添加一个while
循环,以便在前一个输入无效时继续询问用户输入新内容。
std::cout << "CHOOSE A MOVIE THAT IS SCREENING TODAY:\n";
std::cout << "[1] Deadpool\n"
<< "[2] Goosebumps\n";
std::string input;
std::getline(std::cin, input);
while(input != "1" && input != "2") {
std::cout << "Invalid!\n\n";
std::cout << "CHOOSE A MOVIE THAT IS SCREENING TODAY:\n";
std::cout << "[1] Deadpool\n"
<< "[2] Goosebumps\n";
std::getline(std::cin, input);
}
if (input == "1") {
// do something
} else if (input == "2") {
// do something else
}
顺便说一句,请考虑阅读Symfony documentation here和“\n” or '\n' or std::endl
to std::cout
?