【发布时间】:2019-11-12 16:23:28
【问题描述】:
请考虑以下代码:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main(int argc, char** argv) {
enum object {rock, paper, scissors};
object player1, player2;
cout << " "Enter "r" for rock, "p" for paper or "s" for scissors:";
char p1, p2;
cin >> p1 >> p2;
if (p1 == 'r') {player1 = rock;}
else if (p1 == 'p') {player1 = paper;}
else if (p1 == 's') {player1 = scissors;}
else {cout << "invalid input, play again" << endl; exit(1);}
if (p2 == 'r') {player2 = rock;}
else if (p2 == 'p') {player2 = paper;}
else if (p2 == 's') {player2 = scissors;}
else {cout << "invalid input, play again" << endl; exit(1);}
if (player1==player2) cout <<"objects are equal";
else if (player1==rock && player2==paper) cout << "player 2 is the winner";
else if (player1==rock && player2==scissors) cout<<"player 1 is the winner";
else if (player1==paper && player2==rock) cout << "player 1 is the winner";
else if (player1==paper && player2==scissors) cout <<"Palyer 2 is the winnder";
else if (player1==scissors && player2==paper) cout << "Player 1 is winner";
else cout <<"Player 2 is the winner";
cout << endl;
}
当用户必须给出完整的单词(石头、纸、剪刀)而不是输入的首字母时,如何使用 switch 语句重写上述代码。
更新:我已经用 switch 转换了部分代码,但我很想看看是否可以将它用于整个代码:
例如:
switch (p1) {
case 'r': player1=rock; break;
case 'p': player1=paper; break;
case 's': player1=scissors; break;
}
而不是
if (p1 == 'r') {player1 = rock;}
else if (p1 == 'p') {player1 = paper;}
else if (p1 == 's') {player1 = scissors;}
else {cout << "invalid input, play again" << endl; exit(1);}
【问题讨论】:
-
当然只有 3 项,但您可以使用
std::map来摆脱switch和很多if / else语句。 -
@VladfromMoscow 为什么重新打开? OP想要打开字符串,骗子说他们不能
-
@NathanOliver-ReinstateMonica 查看我的回答。
-
@VladfromMoscow 如果你想添加一些东西,你把它添加到骗子中,你不会重新打开问题。现在信息被隔离而不是集成,
标签: c++ switch-statement