if语句即使在具有正确的目标输入值后也会产生错误的行为

时间:2015-08-18 10:05:21

标签: c scanf nested-if

我试图制作一个简单的游戏来掌握Nested 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. 不知怎的,我无法让&&运营商在这里工作。每当我输入p1p2的内容时if内的语句都无法正常工作。
  2. 我应该将变量类型更改为其他类型吗?或者我应该将scanf更改为其他内容吗?
  3. 我想在这里尝试使用switch声明,但我还没有查看如何使用它。

2 个答案:

答案 0 :(得分:1)

在您的代码中

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

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

使用p1p2作为%s的参数,尝试写入已分配的内存并调用undefined behaviour

答案 1 :(得分:1)

 s("%s",&p1);

 s("%s",&p2);

指定者应为%c p1p2char。因此错误的参数调用UB。