我有下面的代码,它不适用于最后两个条件语句:else-if和else。使用strcmp,我会认为,如果player1和player2都有相同的字符串,那么如果body被启用,那么就会启用,但它没有。相反,它再次循环,要求输入剪刀、石头或纸。此外,输入汉堡包和石头之类的东西不会激活else部分,而是要求输入剪刀、石头和纸。
update1:根据调试器,据我所知,这似乎是因为其中一个——如果之前的文件已经用尽了。如果我为player1输入纸,为player2输入纸,那么它会在这个文件中输入:“否则如果(strcmp(player1,“纸”)==0)”。但是它不会打印任何东西,因为它的身体里没有另一张纸。然后,它再次在当循环中循环(再次询问输入:石头、纸或剪刀),永远不会到达这个:“否则如果(strcmp(player1, player2)==0)”
更新2:如果我把'else If(strcmp(player1,player2)==0)放在最上面,从'If'语句开始。该计划有效。然而,由于类似的情况,else仍然不起作用。把它放在最上面是行不通的,因为它应该包含任何其他不是剪刀、石头或纸的措辞。
#include <stdio.h>
#include <string.h>
int main(void) {
char player1[25];
char player2[25];
while(1){
printf("please type one of the following: rock, paper or scissors. Player1 goes first\n");
scanf("%24s%24s",player1,player2);
if(strcmp(player1, "rock") == 0)
{
if (strcmp(player2, "scissors") == 0)
printf("player 1 wins, rock crushes scissors\n");
else if(strcmp(player2, "paper") == 0)
printf("player 2 wins, paper covers rock\n");
}
else if(strcmp(player1, "scissors") == 0)
{
if(strcmp(player2, "paper") == 0)
printf("player 1 wins, scissor cuts paper\n");
else if(strcmp(player2, "rock") == 0)
printf("player 2 wins, rock crushes scissors\n");
}
else if(strcmp(player1, "paper") == 0)
{
if(strcmp(player2, "rock") == 0)
printf("player 1 wins, paper covers rock\n");
else if(strcmp(player2, "scissors") == 0)
printf("player 2 wins, scissor cuts paper\n");
}
else if(strcmp(player2, "rock") == 0)
{
if (strcmp(player1, "scissors") == 0)
printf("player 2 wins, rock crushes scissors\n");
else if(strcmp(player1, "paper") == 0)
printf("player 1 wins, paper covers rock\n");
}
else if(strcmp(player2, "scissors") == 0)
{
if(strcmp(player1, "paper") == 0)
printf("player 2 wins, scissor cuts paper\n");
else if(strcmp(player1, "rock") == 0)
printf("player 1 wins, rock crushes scissors\n");
}
else if(strcmp(player2, "paper") == 0)
{
if(strcmp(player1, "rock") == 0)
printf("player 2 wins, paper covers rock\n");
else if(strcmp(player1, "scissors") == 0)
printf("player 1 wins, scissor cuts paper\n");
}
else if(strcmp(player1,player2) == 0)
{
printf("nobody wins, let’s sing it again!\n");
}
else
{
printf("incorrect input, try again\n");
}
}
return 0;
}
我会稍微修改一下,让它更清晰一点。使用开关,你可以清楚地看到获胜的逻辑。
const char * const answers[] = {"rock", "scissors", "paper"};
#define ROCK 0
#define SCISSORS 1
#define PAPER 2
#define NOTFOUND 3
int main(void) {
char player1[25];
char player2[25];
while(1){
printf("please type one of the following: rock, paper or scissors. Player1 goes first\n");
if(scanf("%24s%24s",player1,player2) != 2)
{
printf("Wrong input\n");
continue;
}
int pl1, pl2;
for(pl1 = 0; pl1 < 3; pl1++)
{
if(!strcmp(player1, answers[pl1])) break;
}
for(pl2 = 0; pl2 < 3; pl2++)
{
if(!strcmp(player2, answers[pl2])) break;
}
if(pl1 == NOTFOUND || pl2 == NOTFOUND)
{
printf("Wrong input\n");
continue;
}
if(pl1 == pl2)
{
printf("Draw\n");
continue;
}
if (pl1 == ROCK)
{
if (pl2 == SCISSORS)
printf("player 1 wins, rock crushes scissors\n");
else if(pl2 == PAPER)
printf("player 2 wins, paper covers rock\n");
}
/* change below acordingly
if(strcmp(player1, "scissors") == 0)
{
if(strcmp(player2, "paper") == 0)
printf("player 1 wins, scissor cuts paper\n");
else if(strcmp(player2, "rock") == 0)
printf("player 2 wins, rock crushes scissors\n");
}
if(strcmp(player1, "paper") == 0)
{
if(strcmp(player2, "rock") == 0)
printf("player 1 wins, paper covers rock\n");
else if(strcmp(player2, "scissors") == 0)
printf("player 2 wins, scissor cuts paper\n");
}
if(strcmp(player2, "rock") == 0)
{
if (strcmp(player1, "scissors") == 0)
printf("player 2 wins, rock crushes scissors\n");
else if(strcmp(player1, "paper") == 0)
printf("player 1 wins, paper covers rock\n");
}
if(strcmp(player2, "scissors") == 0)
{
if(strcmp(player1, "paper") == 0)
printf("player 2 wins, scissor cuts paper\n");
else if(strcmp(player1, "rock") == 0)
printf("player 1 wins, rock crushes scissors\n");
}
if(strcmp(player2, "paper") == 0)
{
if(strcmp(player1, "rock") == 0)
printf("player 2 wins, paper covers rock\n");
else if(strcmp(player1, "scissors") == 0)
printf("player 1 wins, scissor cuts paper\n");
}
*/
}
return 0;
但实际上,如果不需要,我想避免如果-否则梯子:
const char * const answers[] = {"rock", "scissors", "paper"};
#define ROCK 0
#define SCISSORS 1
#define PAPER 2
#define NOTFOUND 3
#define MAKERESULT(a,b) ((a)*10 + (b))
int main(void) {
char player1[25];
char player2[25];
while(1){
printf("please type one of the following: rock, paper or scissors. Player1 goes first\n");
if(scanf("%24s%24s",player1,player2) != 2)
{
printf("Wrong input\n");
continue;
}
int pl1, pl2;
for(pl1 = 0; pl1 < 3; pl1++) if(!strcmp(player1, answers[pl1])) break;
for(pl2 = 0; pl2 < 3; pl2++) if(!strcmp(player2, answers[pl2])) break;
switch(MAKERESULT(pl1,pl2))
{
case MAKERESULT(ROCK,SCISSORS):
printf("player 1 wins, rock crushes scissors\n");
break;
case MAKERESULT(ROCK,PAPER):
printf("player 2 wins, paper covers rock\n");
break;
case MAKERESULT(SCISSORS, PAPER):
printf("player 1 wins, scissor cuts paper\n");
break;
case MAKERESULT(SCISSORS,ROCK):
printf("player 2 wins, rock crushes scissors\n");
break;
case MAKERESULT(PAPER, ROCK):
printf("player 1 wins, paper covers rock\n");
break;
case MAKERESULT(PAPER,SCISSORS):
printf("player 2 wins, scissor cuts paper\n");
break;
case MAKERESULT(ROCK,ROCK):
case MAKERESULT(SCISSORS, SCISSORS):
case MAKERESULT(PAPER, PAPER):
printf("Draw\n");
break;
default:
printf("Wrong input\n");
break;
}
}
return 0;
}
当你有一个if/else链时,只会执行其中一个块,它将是第一个条件为真的块(如果没有条件,则是最后的else
)。
为了更好地说明,请使用以下代码:
if (condition1) {
// do thing 1
} else if (condition2) {
// do thing 2
} else if (condition3) {
// do thing 3
} else {
// do thing 4
}
这实际上是多个链接在一起的if
语句。如果我们添加一些多余的大括号,就会更清楚地看到这实际上是如何工作的:
if (condition1) {
// do thing 1
} else {
if (condition2) {
// do thing 2
} else {
if (condition3) {
// do thing 3
} else {
// do thing 4
}
}
}
从这里,应该很明显,只有满足的第一个条件才会被输入。
这就是为什么从不输入strcmp(player1,player2)=0
块的原因。如果player1输入有效字符串,则将输入前3个条件中的一个,而不会输入其他条件。
您需要移动strcmp(player1, player2)==0
条件,并在前3个方块中的每一个方块中添加ore
。您还可以删除检查玩家2的值的外部方块,因为它们已经在检查玩家1的值的方块中进行了计算。
if(strcmp(player1, "rock") == 0)
{
if(strcmp(player1,player2) == 0)
printf("nobody wins, let’s sing it again!\n");
else if (strcmp(player2, "scissors") == 0)
printf("player 1 wins, rock crushes scissors\n");
else if(strcmp(player2, "paper") == 0)
printf("player 2 wins, paper covers rock\n");
else
printf("incorrect input, try again\n");
}
else if(strcmp(player1, "scissors") == 0)
{
if(strcmp(player1,player2) == 0)
printf("nobody wins, let’s sing it again!\n");
else if(strcmp(player2, "paper") == 0)
printf("player 1 wins, scissor cuts paper\n");
else if(strcmp(player2, "rock") == 0)
printf("player 2 wins, rock crushes scissors\n");
else
printf("incorrect input, try again\n");
}
else if(strcmp(player1, "paper") == 0)
{
if(strcmp(player1,player2) == 0)
printf("nobody wins, let’s sing it again!\n");
else if(strcmp(player2, "rock") == 0)
printf("player 1 wins, paper covers rock\n");
else if(strcmp(player2, "scissors") == 0)
printf("player 2 wins, scissor cuts paper\n");
else
printf("incorrect input, try again\n");
}
else
{
printf("incorrect input, try again\n");
}
作为概念证明,将模板字符串语法与Object.Prototype语法一起使用确实有效: 我是不是漏掉了一些明显的东西?我觉得示例2在逻辑上应该工作,但我对输出感到困惑。我猜这是一个范围问题,但我被输出“是一个未定义的”抛了出来。 ES6小提琴
本文向大家介绍实现strcmp 函数。相关面试题,主要包含被问及实现strcmp 函数。时的应答技巧和注意事项,需要的朋友参考一下 【参考答案】 int m ystrcmp(const c har* str1, const char* str2) { assert((str1 != NULL) && (str2 != NULL)); int r et = 0; while (!(ret = (un
问题内容: 以下代码从文件加载html内容我使用了该线程 请让我知道问题是什么?我希望这是愚蠢的:) 编辑:正确的代码 谢谢乔恩和大家! 问题答案: callback()函数在响应到达时运行,并且不在方法范围内运行,因为该函数已经结束。 您可以在调用中使用属性来设置回调函数的上下文:
我正在将一些存储过程从Sybase TSQL转换为Oracle PL/SQL,我已经遇到了一个我正在努力解决的问题! 命令-DECLARE中从第17行开始出错 t INT:=0;t_error异常;v_line VARCHAR2(100); 开始 实际上,我正在尝试用PL/SQL版本替换以下TSQL:
问题内容: 嗨,我尝试在POST请求中尝试PHPPost请求,认为这可能对我有用,下面给出了我的代码 形成index.php文件,而index2.php是同一目录中的另一个文件,当我打开页面时,我的error.log文件中出现以下错误 我想要做的是我有一个发送发帖请求的预订表格,然后我想处理发帖值并再次将发帖请求发送到贝宝 问题答案: 您需要为php安装CURL支持。 在Ubuntu中,您可以通过
问题内容: Oracle-函数不起作用 所以我不知道我在做什么错。我已经花了几个小时了,非常感谢您的帮助。 因此,基本上我有2个表,一个表被称为主列表,它是一个学生列表,另一个表被调用,它基本上具有该学生所注册课程的列表。 因此,我编写了一个函数,用于将登录学生的用户名(在本例中为)与学生列表进行比较,并确保登录用户是学生。然后,它将与表进行比较,以查找用户注册的任何程序。因此,从本质上讲,当我(