как это исправить если еще заявление? c прогой - PullRequest
0 голосов
/ 26 марта 2019

Что мне сделать, чтобы это исправить?

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

Результат этого кода: Имя игрока1: neee

player1 цвет (черный или белый): белый

игрок 2 цвет: белый // он должен быть черным

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Нечто подобное может быть:

#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;
}
0 голосов
/ 26 марта 2019

Все,

На самом деле я был очень удивлен, что см. Утверждение «если» в приведенном выше источнике правильно - проверено в 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") - это переменная неизвестного типа (вы не включили ее определение) по сравнению с одним из возможных значений строк.Я полагаю, вы пытаетесь сравнить строки, поэтому в этом случае лучше всего использовать функцию strcmp(), как предложил @Thomas Jager.

Также я не думаю, что такой способ кодирования if сравнения является правильнымодин с точки зрения читабельности.Пожалуйста, ищите информацию о том, как написать чистый и понятный код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...