我如何让我的部分代码循环并重复一个问题,直到答案是有效的输入C++
How do I get part of my code to loop and repeat a question until the answer is a valid input C++
代码运行良好,我只是缺少一个元素,如果结尾要求重复游戏,如果我作为用户输入"a",我希望代码用一个新的cout语句重复这个问题,例如"无效答案,请回答y/n,如果是,显然游戏会重新启动(摇滚剪刀游戏b/w 2名玩家)
int main(int argc, const char * argv[]) {
char playAgain ='y' ; // loop control
do
{
char Player1;
char Player2 = ' ';
cout << "Player 1, Enter R, P, or S: "; // Player 1
cin >> Player1;
Player1 = toupper(Player1);
while (Player1 != 'R' && Player1 != 'P' && Player1 !='S' )
{
cout << "please only answer R , P , or S: " << endl;
cin >> Player1;
Player1 = toupper(Player1);
}
{
cout << "Player 2, Enter R, P, or S: "; // Player 2
cin >> Player2;
Player2 = toupper(Player2);
while (Player2 != 'R' && Player2 != 'P' && Player2 !='S' )
{
cout << "please only answer R , P , or S: " << endl;
cin >> Player2;
Player2 = toupper(Player2);
}}
if (Player1 == Player2) //TIE
{
cout << "Nobody wins."<<endl;}
else if (Player1 == 'R' && Player2 == 'P')
{
cout << "Paper covers rock, Player 2 wins."<< endl;
}
else if (Player1 == 'P' && Player2 == 'R')
{
cout << "Paper covers rock, Player 1 wins."<< endl;
}
else if (Player1 == 'S' && Player2 == 'P')
{
cout << "Scissors cut paper, Player 1 wins."<< endl;
}
else if (Player1 == 'P' && Player2 == 'S')
{
cout << "Scissors cut paper, Player 2 wins."<< endl;
}
else if (Player1 == 'R' && Player2 == 'S')
{
cout << "Rock breaks scissors, Player 1 wins."<< endl;
}
else if (Player1 == 'S' && Player2 == 'R')
{
cout << "Rock breaks scissors, Player 2 wins."<< endl;
}
{ cout << "Play again? (y/n): "; // Player 1
cin >> playAgain;
if (playAgain=='N' || playAgain=='n')
{ cout <<"BYEEEEE"<<endl;}
}}
while (playAgain=='Y' || playAgain=='y');
return 0;
}
我相信最优雅的方法是这样做:
#include <iostream>
#include <string>
#include <set>
static const std::set<std::string> RPS {
"R",
"P",
"S"
};
static const std::set<std::string> yesno {
"yes",
"no"
};
std::string ask_user(
const std::string& question,
const std::set<std::string>& valid_answers
) {
std::cout << question << std::flush; // outputs question (and flushes cout so it displays)
std::string answer;
while (true) { // this loop will terminate only when "break;" is reached
std::getline(std::cin, answer); // get answer
if (valid_answers.count(answer) == 0) { // if answer is not in valid_answers
std::cout << "Invalid answer!" << std::endl; // complain to the user
} else { // if answer is not invalid
break; // exit loop
}
}
return answer;
}
然后你可以要求这样的行动:
std::string p1_move = ask_user("Player 1 move (R/P/S)?n", RPS);
或者像这样的是/否答案:
std::string answer = ask_user("Another game (yes/no)?n", yesno);
这将防止您在要求用户移动和要求用户玩另一个游戏时重复代码,因此这是更好的代码练习。
您可以这样做:
int main() {
while(true) {
char input;
std::cout << "Would you like to continue the game? (y/n): ";
std::cin >> input;
if(input == 'n' || input == 'N')
return 0;
else if(input == 'y' || input == 'Y') {
startGame();
break;
} else {
std::cout << "Invalid response." << std::endl;
}
}
}
cout << "Play again? (y/n): ";
cin >> playAgain;
while (playAgain != 'Y' && playAgain != 'y' && playAgain !='n' )
{ cout << "Error input :Play again? (y/n): "; // Player 1
cin >> playAgain;
^想明白了!是的,回到我的压痕,并与我的第一个循环进行了比较。非常感谢大家的帮助:)
相关文章:
- 一个关于在C++中重载布尔运算符的问题
- 发送一个带有libcurl C++问题的帖子请求:s
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 关于复制构造函数的一个棘手问题
- Tmax(0x7fffffff 的一个奇怪问题,为什么 (!x) == x?
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- 在解决链表问题时创建一个额外的节点是一个好习惯吗?
- 存储另一个函数返回的布尔数组时遇到问题
- 为什么在分配给成员变量之前获取unique_ptr的返回是一个问题?
- 我在使用 boost::serialization 时遇到了一个问题,我的代码在 Linux 中运行良好,但在 Wind
- 我有一个关于C++提升的问题:: asio 和 std :: 异步
- 这是一个二叉搜索树吗?黑客排名问题
- 几对性能问题(一个较大的向量与较小的块向量),值得存储迭代索引以进行矢量访问
- GLSL问题:一个程序中有多个着色器
- 设计问题——一个函数调用所有三个函数