1

我正在尝试制作一个简单的游戏来掌握嵌套 If 语句。我还是 C 语言的新手,我只有一点点 Java。

#define p printf
#define s scanf
#include<stdio.h>
int main(){
    char p1,p2;
r:  p("Player 1 : ");
    s("%s",&p1);
    p("Player 2 : ");
    s("%s",&p2);
    if ((p1=='s') && (p2=='s')){
        p("It's a draw\n");
    }else if (p1=='r' && p2=='r'){
        p("It's a Draw\n");
    }else if (p1=='p' && p2=='p'){
        p("It's a Draw\n");
    }else if (p1=='s' && p2=='r'){
        p("Player 2 Wins\n");
    }else if (p1=='s' && p2=='p'){
        p("Player 1 Wins\n");
    }else if (p1=='r' && p2=='s'){
        p("Player 1 Wins\n");
    }else if (p1=='r' && p2=='p'){
        p("Player 2 Wins\n");
    }else if (p1=='p' && p2=='s'){
        p("Player 1 Wins\n");
    }else if (p1=='p' && p2=='r'){
        p("Player 1 Wins\n");
    }
    goto r;
}

好的,所以我将在这里解决问题:

  1. 不知何故,我无法让&&操作员在这里工作。每次我输入一些东西p1并且p2里面的语句if不起作用。
  2. 我应该将变量类型更改为其他类型吗?还是我应该把我的换成scanf别的?
  3. 我想尝试使用switch这里的语句,但我还没有查看如何使用它。
4

2 回答 2

1
 s("%s",&p1);

 s("%s",&p2);

Specifer 应该是%casp1p2are char。因此错误的论点会调用 UB。

于 2015-08-18T10:08:43.593 回答
1

在您的代码中

 s("%s",&p1);
 ....
 s("%s",&p2);

是错误的并调用未定义的行为。p1并且p2是类型char,您应该使用%c格式说明符来获取值。

使用p1andp2作为 的 参数%s会尝试写入分配的内存并调用 未定义的行为

于 2015-08-18T10:07:27.410 回答