制作剪刀石头布游戏但是while运行不正常

问题描述 投票:0回答:1

我正在尝试做到这一点,当用户输入“土豆”之类的内容时,它会说这是错误的,然后循环询问他的选择是什么,但是当他说“摇滚”并且摇滚应该是正确的选择之一时,它仍然会循环回来问他的选择是什么。我想要清楚地回答我的代码有什么问题,以便我的代码最终能够工作。

#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>

int main(){

    char choice[25];

    printf("***********************\n");
    printf("Welcome to rock, paper, scissors!!\n");
    printf("***********************\n");

    while(strcmp(choice, "ROCK") != 0 ||strcmp(choice, "SCISSORS") != 0||strcmp(choice, "PAPER") != 0){
        printf("Choose : [rock/paper/scissors]\n");
        scanf("%s", &choice);
        strupr(choice);

        if(strcmp(choice, "ROCK") == 0 ||strcmp(choice, "SCISSORS") == 0||strcmp(choice, "PAPER") == 0){
            printf("You choose %s\n", choice);
        }
        else{
            printf("Invalid Choice!!\n");
        }
    }

这不完全是游戏,由于这个问题,我无法在这个项目中取得进展,请不要偏离主题,因为这显然不是偏离主题。谢谢:)

c
1个回答
0
投票

while循环测试不正确:

while(strcmp(choice, "ROCK") != 0 ||strcmp(choice, "SCISSORS") != 0||strcmp(choice, "PAPER") != 0){

如果它与三个字符串中的至少一个不匹配,这将继续循环,即无论它包含什么值,它都会继续循环。 使用它会更有意义:

while(strcmp(choice, "ROCK") != 0 && strcmp(choice, "SCISSORS") != 0 && strcmp(choice, "PAPER") != 0){

只要它不匹配三个字符串中的任何一个,就会继续循环。

但这仍然不太正确,因为最初进入循环时

choice
尚未初始化。 在用户输入值之前不应检查它。 此外,循环已经在检查有效输入,您真的根本不需要预先测试的循环吗? 只要这样做:

    for (;;) {
        printf("Choose : [rock/paper/scissors]\n");
        scanf("%s", &choice);
        strupr(choice);

        if(strcmp(choice, "ROCK") == 0 ||strcmp(choice, "SCISSORS") == 0||strcmp(choice, "PAPER") == 0){
            printf("You choose %s\n", choice);
            break;
        }
        else{
            printf("Invalid Choice!!\n");
        }
    }

for (;;)
只是一个无限循环。 当做出有效选择时,它会显式地打破循环。 这就是您所需要的。

© www.soinside.com 2019 - 2024. All rights reserved.