Tia*_* C. 0 c variables if-statement switch-statement
我有一个IF语句,我想转换成一个Switch语句......但它有2个变量!是否可以在C上进行?
这是一个摇滚,纸,剪刀游戏:
(R代表岩石,P代表纸张,S代表剪刀)
char play1, play2;
printf("\nPlayer 1 - Enter your Play: ");
scanf ("%c", &play1);
printf("\nPlayer 2 - Enter your Play: ");
scanf (" %c", &play2);
if (play1 == 'R' && play2 == 'P') {
printf ("Paper wins!"); }
else if (play1 == 'R' && play2 == 'S') {
printf ("Rock wins!");}
else if (play1 == 'R' && play2 == 'R) {
printf ("Draw!");}
Run Code Online (Sandbox Code Playgroud)
我必须为其他选项做这个,所以最好使用开关!
#include <stdio.h>
#define SWITCH(a, b) char _a = a; char _b = b; if (0)
#define CASE(a, b) } else if ((a == _a) && (b == _b)) {
int main(void)
{
char play1, play2;
printf("\nPlayer 1 - Enter your Play:");
scanf ("%c", &play1);
getchar();
printf("\nPlayer 2 - Enter your Play:");
scanf ("%c", &play2);
getchar();
SWITCH(play1, play2) {
CASE('R','P') printf ("Paper wins!");
CASE('R','S') printf ("Rock wins!");
CASE('R','R') printf ("Draw!");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是一个笑话:P
编辑:案例支持":"
#define PASTE(a, b) a##b
#define LABEL(a, b) PASTE(a, b)
#define SWITCH(a, b) char _a = a; char _b = b; if (0)
#define CASE(a, b) } else if ((a == _a) && (b == _b)) { LABEL(LBL, __LINE__)
Run Code Online (Sandbox Code Playgroud)
但不适用于:
CASE('R','R'): printf ("Draw a!"); CASE('S','R'): printf ("Draw!");
Run Code Online (Sandbox Code Playgroud)
两个案例在同一行
解决了使用:
#define SWITCH(a, b) char _a = a; char _b = b; if (0)
#define CASE(a, b) } else if ((a == _a) && (b == _b)) {switch(1) case 1
Run Code Online (Sandbox Code Playgroud)
希望没人用它:)
一般来说,答案是"不":switch语句使用单个变量.但是,在某些情况下,您可以进行转换.例如,如果你有两个变量,a并且b,a可以是0,1或2,b那可以是0, 1, 2, or 3,你可以这样做一个开关:
switch (a*10+b) {
case 0: break; // a == 0, b == 0
case 10: break; // a == 1, b == 0
case 20: break; // a == 2, b == 0
case 1: break; // a == 0, b == 1
case 11: break; // a == 1, b == 1
case 21: break; // a == 2, b == 1
case 2: break; // a == 0, b == 2
case 12: break; // a == 1, b == 2
case 22: break; // a == 2, b == 2
case 3: break; // a == 0, b == 3
case 13: break; // a == 1, b == 3
case 23: break; // a == 2, b == 3
}
Run Code Online (Sandbox Code Playgroud)