【发布时间】:2020-06-04 03:17:24
【问题描述】:
虽然循环每次迭代两次,CPU 只在为剪刀选择“S”时得分。另一个问题是,我如何让它变得更高级,我在哪里添加该功能?我必须使用字符 'r'、's' 和 'p' 而不是 1、2、3 来接受用户输入。不知道如何继续解决这个问题
#include <stdlib.h>
#include<time.h>
int main () {
char player1;
int player2;
int userScore = 0, cpuScore = 0;
player2 = rand ( ) % 3 + 1;
srand ((int) time (NULL));
int count = 0;
while(count <= 10) {
printf("\nEnter p for Paper, r for rock, or S for scissor: ");
scanf("%c", &player1);
switch(player1) {
case 'P' :
if(player1 == 'P' && player2 == 1) {
printf("Draw!");
break;
} else if(player1 == 'P' && player2 == 2) {
userScore++;
printf("User won this one!");
break;
} else {
cpuScore++;
printf("CPU won this one!");
break;
}
case 'R':
if(player1 == 'R' && player2 == 2) {
printf("Draw!");
break;
} else if(player1 == 'R' && player2 == 3) {
userScore++;
printf("User won this one!");
break;
} else {
cpuScore++;
printf("CPU won this one!");
break;
}
case 'S':
if(player1 == 'S' && player2 == 3) {
printf("Draw!");
break;
} else if(player1 == 'S' && player2 == 1) {
userScore++;
break;
printf("User won this one!");
} else {
cpuScore++;
printf("CPU won this one!");
break;
}
default :
printf("\nInvalid Input");
break;
}
printf("\nUser Score: %d", userScore);
printf("\nCPU Score: %d", cpuScore);
count++;
}
if(userScore == cpuScore) {
printf("\nDraw game!");
} else if(userScore > cpuScore) {
printf("\nYou win!");
} else {
printf("\nCPU wins!");
}
return 0;
} ```
【问题讨论】:
-
请应用一致的缩进。
-
您需要致电
srand()之前rand()否则您每次都会得到相同的player2。 -
@xing :因为只有一个输入请求并且没有游戏循环,所以在
%c前面加一个空格没有任何用处。如果游戏被迭代,它只能解决scanf()问题的一个子集。例如,用户可能会输入"paper"或"pp",这会破坏您的方法。 -
@xing 是的,我的错误 - 代码中糟糕的缩进并不明显。我的观点是前导空格只消耗空格,而不是其他垃圾。请参阅我的答案以获得解决方案。
标签: c if-statement while-loop switch-statement