c-如何解决这个if else语句?

时间:2019-03-26 13:01:01

标签: c

该如何解决?

Piece player1,player2;


printf("\nChess\n");

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 white\n");
    fflush(stdin);
}
else if(player1.plaVar.color=="w","h","i","t","e")
{
    printf("\nPlayer 2 color is black\n");
    fflush(stdin);
}

printf("\nInput Player 2 name:");
scanf("%s",&player2.plaVar.name);   

此代码的结果: player1名称:neee

player1颜色(黑色或白色):白色

播放器2颜色:白色 //它应该是黑色的

2 个答案:

答案 0 :(得分:-1)

全部

实际上,令我惊讶的是,上述来源中的'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")是一个未知类型的变量(您未包括该变量的定义),而与以下一种变量相比字符串值。我猜您尝试比较字符串,因此在这种情况下,最好的方法是按照@Thomas Jager的建议使用strcmp()函数。

从可读性的角度来看,我也不认为这种编码if比较的方法是正确的方法。请查找有关如何编写干净且可维护的代码的信息。

答案 1 :(得分:-1)

类似这样的东西:

#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("\nChess\n");

    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 black\n");
        fflush(stdin);
    }
    else if(!strcmp(player1.plaVar.color, "white"))
    {
        printf("\nPlayer 2 color is black\n");
        fflush(stdin);
    }

    printf("\nInput Player 2 name:");
    scanf("%s",&player2.plaVar.name);   
    return 0;
}
相关问题