我正在尝试编写一个C ++程序来评分纸质岩石剪刀游戏 两个用户中的每一个都在P,R或S中输入。 然后该程序宣布获胜者以及确定获胜者的基础:(我必须使用switch语句,不能使用if if,else-else if else语句)
我遇到的问题是我得到2个输出,因为它在休息后执行。例如剪刀剪纸。 玩家2胜! 剪刀剪纸。 玩家1胜!
这是我的代码,提前谢谢。
#include <iostream>
using namespace std;
int main()
{
char pl1;
char pl2;
cout << "Enter [R]ock, [P]aper, or [S]cissors" << endl;
cout << "Player 1: ";
cin>>pl1;
cout << "Enter [R]ock, [P]aper, or [S]cissors" << endl;
cout << "Player 2: ";
cin>>pl2;
switch (pl1)
{
case 'R':
case 'r':
{
switch(pl2)
case 'P':
case 'p':
{
cout << "Paper beats Rock." << endl;
cout << "Player 2 WINS!" << endl;
break;
}
case 'S':
case 's':
{
cout << "Rock smashes Scissors." << endl;
cout << "Player 1 WINS!" << endl;
break;
}
break;
}
break;
}
switch (pl1)
{
case 'P':
case 'p':
{
switch(pl2)
case 'R':
case 'r':
{
cout << "Paper beats Rock." << endl;
cout << "Player 1 WINS!" << endl;
break;
}
case 'S':
case 's':
{
cout << "Scissors cuts Paper." << endl;
cout << "Player 2 WINS!" << endl;
break;
}
break;
}
break;
}
switch (pl1)
{
case 'S':
case 's':
{
switch(pl2)
case 'R':
case 'r':
{
cout << "Rock smashes Scissors." << endl;
cout << "Player 2 WINS!" << endl;
break;
}
case 'P':
case 'p':
{
cout << "Scissors cuts Paper." << endl;
cout << "Player 1 WINS!" << endl;
break;
}
break;
}
break;
}
switch (pl1)
{
case 'R':
case 'r':
case 'P':
case 'p':
case 'S':
case 's':
{
switch(pl2 == pl1)
{
case true:
{
cout<<"Nobody wins"<<endl;
break;
}
}
break;
}
break;
}
return 0;
}
答案 0 :(得分:0)
删除所有类似
的代码}
switch (pl1)
{
除了最后一个。
添加默认子句。
在打印胜利信息而不是中断后添加return语句。
答案 1 :(得分:0)
以下是您的代码版本,可以按预期运行。
#include <iostream>
using namespace std;
int main ()
{
char pl1;
char pl2;
cout << "Enter [R]ock, [P]aper, or [S]cissors" << endl;
cout << "Player 1: ";
cin >> pl1;
cout << "Enter [R]ock, [P]aper, or [S]cissors" << endl;
cout << "Player 2: ";
cin >> pl2;
switch (pl1)
{
case 'R':
case 'r':
{
switch (pl2)
{
case 'P':
case 'p':
{
cout << "Paper beats Rock." << endl;
cout << "Player 2 WINS!" << endl;
break;
}
case 'S':
case 's':
{
cout << "Rock smashes Scissors." << endl;
cout << "Player 1 WINS!" << endl;
break;
}
}
break;
}
case 'P':
case 'p':
{
switch (pl2)
{
case 'R':
case 'r':
{
cout << "Paper beats Rock." << endl;
cout << "Player 1 WINS!" << endl;
break;
}
case 'S':
case 's':
{
cout << "Scissors cuts Paper." << endl;
cout << "Player 2 WINS!" << endl;
break;
}
}
break;
}
case 'S':
case 's':
{
switch (pl2)
{
case 'R':
case 'r':
{
cout << "Rock smashes Scissors." << endl;
cout << "Player 2 WINS!" << endl;
break;
}
case 'P':
case 'p':
{
cout << "Scissors cuts Paper." << endl;
cout << "Player 1 WINS!" << endl;
break;
}
}
break;
}
}
switch (pl2 == pl1)
{
case true:
cout << "Nobody wins" << endl;
break;
}
}
你犯的主要错误是忘记为内部switch(pl2)
块添加一个范围,导致双重攻击。
答案 2 :(得分:0)
基本问题是你在某些switch语句的(预期)主体周围缺少}
... switch (pl1)
{
case 'R':
case 'r':
{
switch(pl2)
case 'P':
case 'p':
{
cout << "Paper beats Rock." << endl;
cout << "Player 2 WINS!" << endl;
break;
}
case 'S':
case 's':
{
cout << "Rock smashes Scissors." << endl;
cout << "Player 1 WINS!" << endl;
break;
}
break;
}
break;
}
,导致除第一个之外的所有情况都成为封闭的一部分切换声明。举个例子,你的第一个双关键开关:
switch (pl1)
{
case 'R':
case 'r':
{
switch(pl2) {
case 'P':
case 'p':
{
cout << "Paper beats Rock." << endl;
cout << "Player 2 WINS!" << endl;
break;
}
}
case 'S':
case 's':
{
cout << "Rock smashes Scissors." << endl;
cout << "Player 1 WINS!" << endl;
break;
}
break;
}
break;
}
实际上是(添加了大括号和固定缩进):
'r'
所以使用输入'p'
和's'
,它会打印第一条消息,然后进入{{1}}大小写并打印第二条消息......
最让您感到惊讶的是,即使使用-Wall -Wextra,您也看不到任何关于此的编译器警告 - 这似乎是编译器应警告的内容。