我应该怎么做才能解决这个问题?
Piece player1,player2;
printf("nChessn");
printf("nInput Player 1 name:");
scanf("%s",&player1.plaVar.name);
printf("nPlayer 1 color:(black or white):");
scanf("%s",&player1.plaVar.color);
fflush(stdin);
if(player1.plaVar.color=="b","l","a","c","k")
{
printf("nPlayer 2 is whiten");
fflush(stdin);
}
else if(player1.plaVar.color=="w","h","i","t","e")
{
printf("nPlayer 2 color is blackn");
fflush(stdin);
}
printf("nInput Player 2 name:");
scanf("%s",&player2.plaVar.name);
此代码的结果:玩家1 姓名:尼伊
播放器1颜色(黑色或白色(:白色
播放器 2 颜色:白色它应该是黑色的
全部,
实际上,我很惊讶看到上面来源中的"if"语句是正确的 - 在 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf 中检查。这种结构是可编译的(在GCC 7.3上检查(。我每天都能学到新东西...
但回到问题的起源:
我很难理解scanf("%s",&player1.plaVar.name);
它告诉我你想输入一个字符串,然后if(player1.plaVar.color=="b","l","a","c","k")
是一个未知类型的变量(你没有包括它的定义(,与字符串的可能值之一相比。我猜你尝试比较字符串,所以在这种情况下,最好的方法是按照 Jager 的建议使用strcmp()
函数@Thomas。
此外,从可读性的角度来看,我不认为这种编码if
比较方式是正确的。请查找有关如何编写干净且可维护的代码的信息。
可能是这样的:
#include<stdio.h>
#include<string.h>
typedef struct player
{
char name[100];
char color[6];
}Player;
typedef struct piece
{
Player plaVar;
}Piece;
int main()
{
Piece player1,player2;
printf("nChessn");
printf("nInput Player 1 name:");
scanf("%s",&player1.plaVar.name);
printf("nPlayer 1 color:(black or white):");
scanf("%s",&player1.plaVar.color);
fflush(stdin);
if(!strcmp(player1.plaVar.color, "black"))
{
printf("nPlayer 2 is blackn");
fflush(stdin);
}
else if(!strcmp(player1.plaVar.color, "white"))
{
printf("nPlayer 2 color is blackn");
fflush(stdin);
}
printf("nInput Player 2 name:");
scanf("%s",&player2.plaVar.name);
return 0;
}