如何修复这个如果不是语句?c 程序



我应该怎么做才能解决这个问题?

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;
}

最新更新