我试图制作一个简单的游戏来掌握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;
}
好的,所以我将在这里解决问题:
&&
运营商在这里工作。每当我输入p1
和p2
的内容时if
内的语句都无法正常工作。 scanf
更改为其他内容吗?switch
声明,但我还没有查看如何使用它。答案 0 :(得分:1)
在您的代码中
s("%s",&p1);
....
s("%s",&p2);
错误并调用未定义的行为。 p1
和p2
的类型为char
,您应该使用%c
格式说明符来获取值。
使用p1
和p2
作为%s
的参数,尝试写入已分配的内存并调用undefined behaviour。
答案 1 :(得分:1)
s("%s",&p1);
s("%s",&p2);
指定者应为%c
p1
且p2
为char
。因此错误的参数调用UB。