Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1721 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Compilation error: invalid operands to binary != ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Compilation error: invalid operands to binary != ...

n°2299467
g-orwell
Posté le 20-04-2017 à 22:03:53  profilanswer
 

Hello tout le monde,
 
J'essaye d'aider ma soeur en première année d'informatique mais là ça dépasse mes connaissances.
A la compilation elle rencontre l'erreur ci dessous:
error: invalid operands to binary != (have 'piece_t' and 'int')
Pourriez vous m'expliquer simplement ce qui cloche dans son code?

Code :
  1. #define JOUEUR_1 1
  2. #define JOUEUR_0 0
  3. #define JOUEUR_VIDE -1
  4. #define PIECE_NON_PROMUE 0
  5. #define PIECE_PROMUE 1
  6. #define FAUX 0
  7. #define VRAI 1
  8. #define VIDE -1
  9. #define T 11
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. #include <ctype.h>
  14. struct piece_s
  15. {
  16. int joueur;
  17. int type;
  18. int statut;
  19. }; typedef struct piece_s piece_t;
  20. struct coordonnees_s
  21. {
  22. int x; // ligne du tableau;
  23. int y; // colonne du tableau;
  24. }; typedef struct coordonnees_s coordonnees_t;
  25. typedef struct coup_s coup_t; //maillon de coups
  26. struct coup_s
  27. {
  28. coordonnees_t depart; //sauvegarder les coordonees de la piece de depart
  29. coordonnees_t arrivee; //sauvegarder les coordonnees d'arriver la piece
  30. int promotion; //booleen
  31. int capture; //booleen
  32. coup_t *suivant;
  33. coup_t *precedant;
  34. };
  35. struct liste_s
  36. {
  37. coup_t *debut;
  38. int nb_de_coups;
  39. coup_t *fin; //ladresse de fin du dernier maillon
  40. }; typedef struct liste_s liste_t;
  41. struct partie_s
  42. {
  43. piece_t tablier[T][T]; // T=taille
  44. liste_t coup_joue;
  45. int bool_joueur;
  46. int joueur;
  47. }; typedef struct partie_s partie_t;
  48. typedef struct maillon_capture_s maillon_capture_t;
  49. struct maillon_capture_s
  50. {
  51.     coordonnees_t depart; //sauvegarder les coordonees de la piece de depart
  52. coordonnees_t arrivee; //sauvegarder les coordonnees d'arriver la piece
  53.     int promotion; //booleen
  54. int capture; //booleen
  55. coordonnees_t coord_capture;
  56. maillon_capture_t *suivant;
  57. };
  58. typedef struct liste_capture_s liste_capture_t;
  59. struct liste_capture_s
  60. {
  61. liste_capture_t *liste_capture;
  62. maillon_capture_t *debut;
  63. int taille;
  64. };
  65. //c'est un pointeur qui nous permetra de sauvegarder la position de la derniere piece mise dans la reserve
  66. liste_capture_t *liste_capture;
  67. //prend en arguments un joueur, un type et un statut, et renvoie une piece.
  68. piece_t piece_creer(int joueur, int type, int statut);
  69. //prend en argument une piece et renvoie son joueur.
  70. int piece_joueur(piece_t piece);
  71. //prend en argument un caractere et renvoie la piece correspondante.
  72. piece_t piece_identifier(char type);
  73. //prend en argument une piece et renvoie le caractere qui lui est associe.
  74. char piece_caractere(piece_t piece);
  75. //prend en argument une piece et affiche le caractere qui lui est associe .
  76.   void piece_afficher(piece_t piece);
  77. //
  78. void changer_joueur(partie_t *partie);
  79. //
  80. void changer_statut(piece_t *piece);
  81. //
  82. int case_vide(piece_t caase);
  83. //
  84. void modifier_case(partie_t *partie, piece_t piece, coordonnees_t coord );
  85. //
  86. void affiche_plateau(partie_t *partie);
  87. //
  88. void deplacemet(partie_t *partie, coordonnees_t coord_de_depart, coordonnees_t coord_darrivee);
  89. //
  90. void annuler_deplacement(partie_t *partie);
  91. //
  92. int* saisie_case();
  93. //
  94. partie_t *partie_creer();
  95. //
  96. coup_t *extraire_debut_liste(liste_t *liste);
  97. //
  98. void partie_detruire(partie_t *partie);
  99. //
  100. void partie_sauvegarder(partie_t* partie, const char* chemain);
  101. //
  102. char partie_charger(partie_t* partie, const char* chemain);
  103. //
  104. partie_t *partie_nouvelle();
  105. piece_t piece_creer(int joueur, int type, int statut)
  106. {
  107. piece_t piece;
  108. piece.joueur=joueur;
  109. piece.type=type;
  110. piece.statut=statut;
  111. return piece;
  112. }
  113. //**********************************************_________________________************************************************
  114.  
  115. int piece_joueur(piece_t piece)
  116. {
  117. return piece.joueur;
  118. }
  119.  
  120. //**********************************************_________________________*************************************************
  121.  
  122. piece_t piece_identifier(char type)
  123. {
  124. int i=0;
  125. char tab_type[]= "malloc(15*sizeof(char))";
  126. piece_t piece=piece_creer(JOUEUR_VIDE,'.',VIDE);
  127.  
  128. strcpy(tab_type,"plnbrsgkdjcfta" );
  129.  
  130. if(isupper(type))
  131. {
  132.  for(i=0;i<8; i++)
  133.  {
  134.   if(toupper(tab_type[i])==type)
  135.   {
  136.    return piece_creer(JOUEUR_0,type,PIECE_PROMUE);
  137.   }
  138.  }
  139.  for(i=0; i<14; i++)
  140.  {
  141.   if (toupper(tab_type[i])==type)
  142.   {
  143.    return piece_creer(JOUEUR_0, type, PIECE_PROMUE);
  144.   }
  145.  }
  146. }
  147. else
  148. {
  149.  for (i = 0; i < 8; ++i)
  150.  {
  151.   return piece_creer(JOUEUR_1, type, PIECE_PROMUE);
  152.  }
  153. }
  154.  
  155. return piece;
  156. }
  157. //*********************************************_________________________**************************************************
  158.  
  159. char piece_caractere(piece_t piece)
  160. {
  161. return piece.type;
  162. }
  163.  
  164. //*********************************************_________________________****************************************************
  165.  
  166. void piece_afficher(piece_t piece)
  167. {
  168. printf("%3c",piece.type );
  169. }
  170.  
  171. //***********************************************________________________*******************************************************//
  172. int case_vide(piece_t caase)
  173. {
  174. if (caase.type == '.')
  175. {
  176.  return 1;
  177. }
  178. else
  179. {
  180.  return 0;
  181. }
  182. }
  183.  
  184.  
  185. //*************************************___________________________________**********************************/
  186.  
  187. void modifier_case(partie_t *partie, piece_t piece, coordonnees_t coord )
  188. {
  189. partie->tablier[coord.x][coord.y]=piece;
  190. }
  191.  
  192. //*************************************_____________________________________********************//
  193.  
  194. void changer_joueur ( partie_t *partie)
  195. {
  196. if ( partie->joueur ==0)
  197. {
  198.  partie->joueur=1;
  199. }
  200. else
  201. {
  202.  partie->joueur=0;
  203. }
  204. }
  205.  
  206. //**************************************________________________________________******************************//
  207.  
  208. void affiche_plateau(partie_t *partie)
  209. {
  210. int i,j;
  211. printf("  " );
  212. for(i=0; i<T; i++)
  213. {
  214.  printf("%3d", i);
  215. }
  216. printf("\n" );
  217. for (i = 0; i < T; ++i)
  218. {
  219.  printf("%2d\n", i);
  220.  
  221.  for ( j = 0; i < T; ++i)
  222.  {
  223.   piece_afficher(partie->tablier[i][j]);
  224.  }
  225.  printf("\n" );
  226. }
  227. }
  228.  
  229. //***********************************______________________________*****************************//
  230. void changer_statut(piece_t *piece)
  231. {
  232. char *tab1=malloc(7*sizeof(char));
  233. char *tab2=malloc(7*sizeof(char));
  234. int i=0;
  235.  
  236. strcpy(tab1, "djcfta" );
  237. strcpy(tab2, "plnbrs" );
  238.  
  239. if (isupper(piece->type))
  240. {
  241.  for (i = 0; i <6; ++i)
  242.  {
  243.   tab1[i]=toupper(tab1[i]);
  244.   tab2[i]=toupper(tab2[i]);
  245.  }
  246. }
  247. if (piece->statut ==PIECE_PROMUE)
  248. {
  249.  for ( i = 0; i < 6; ++i)
  250.  {
  251.   if (tab1[i]==piece->type)
  252.   {
  253.    piece->type=tab2[i];
  254.    break;
  255.  
  256.   }
  257.  }
  258. }
  259. if (isupper(piece->type))
  260.   {
  261.    for (i = 0; i < 6; ++i)
  262.    {
  263.     tab1[i]=toupper(tab1[i]);
  264.     tab2[i]=toupper(tab2[i]);
  265.    }
  266.   }
  267.   if (piece->statut==PIECE_PROMUE)
  268.   {
  269.    for ( i = 0; i < 6; ++i)
  270.    {
  271.     if (tab1[i]==piece->type)
  272.     {
  273.      piece->type=tab2[i];
  274.      break;
  275.     }
  276.    }
  277.    piece->statut=PIECE_NON_PROMUE;
  278.   }
  279.   else
  280.   {
  281.    for (i = 0; i < 6; ++i)
  282.    {
  283.     if (tab2[i]==piece->type)
  284.     {
  285.      piece->type=tab1[i];
  286.      break;
  287.     }
  288.    }
  289.    piece->statut=PIECE_PROMUE;
  290.  
  291.   }
  292.   free(tab1);
  293.   free(tab2);
  294. }
  295. //****************************************************_________________________________________*******************************//
  296. void deplacemet(partie_t *partie, coordonnees_t coord_de_depart, coordonnees_t coord_darrivee)
  297. {
  298.  
  299. int i=0,j=0;
  300. int bool_capture=FAUX, bool_promotion=FAUX, reponse=FAUX;
  301. coup_t *nv_coup=malloc(sizeof(coup_t));
  302.  
  303. if(!case_vide(partie->tablier[coord_darrivee.x][coord_darrivee.y]))
  304. {
  305.  if (partie->bool_joueur==JOUEUR_1)
  306.  {
  307.   j=1;
  308.   i=T-1;
  309.   while(!case_vide(partie->tablier[i][j]) && (j<T-1))
  310.   {
  311.    j++;
  312.   }
  313.   while(!case_vide(partie->tablier[i][j]) && (i>0))
  314.   {
  315.    i--;
  316.   }
  317.   partie->tablier[coord_darrivee.x][coord_darrivee.y].joueur=JOUEUR_0;
  318.  }
  319.  else
  320.  {
  321.   i=0;
  322.   j=T-2;
  323.  
  324.   while(!case_vide(partie->tablier[i][j]) && (j>0))
  325.   {
  326.    j--;
  327.   }
  328.   while(!case_vide(partie->tablier[i][j]) && (i<T-1))
  329.   {
  330.    i++;
  331.   }
  332.   partie->tablier[coord_darrivee.x][coord_darrivee.y].joueur=JOUEUR_1;
  333.  }
  334.  bool_capture=VRAI;
  335.  
  336.  maillon_capture_t *nv_coup=malloc(sizeof(nv_coup));
  337.  nv_coup->coord_capture.x=i;
  338.  nv_coup->coord_capture.y=j;
  339.  if (liste_capture->T != 0)
  340.  {
  341.   nv_coup->suivant = liste_capture->debut;
  342.  }
  343.  else
  344.  {
  345.   nv_coup->suivant=NULL;
  346.  }
  347.  liste_capture->debut=nv_coup;
  348.  liste_capture->T=T++;
  349.  if(isupper(partie->tablier[i][j].type))
  350.  {
  351.   partie->tablier[i][j].type=tolower(partie->tablier[i][j].type);
  352.  }
  353.  else
  354.  {
  355.   partie->tablier[i][j].type=toupper(partie->tablier[i][j].type);
  356.  }
  357.  
  358.  modifier_case(partie,partie->tablier[coord_de_depart.x][coord_de_depart.y],coord_de_depart);
  359.  modifier_case(partie,partie->tablier[T-1][0],coord_de_depart);
  360.  
  361.  
  362.  if (partie->tablier[coord_darrivee.x][coord_darrivee.y].statut == PIECE_NON_PROMUE)
  363.  {
  364.   if (partie->tablier[coord_darrivee.x][coord_darrivee.y].type != 'G' && partie->tablier[coord_darrivee.x][coord_darrivee.y] != 'K' && partie->tablier[coord_darrivee.x][coord_darrivee.y].type != 'g' && partie->tablier[coord_darrivee.x][coord_darrivee.y] != 'k')
  365.  
  366.   {
  367.    if ((partie->bool_joueur == JOUEUR_1 && coord_darrivee.x < 4) || (partie->bool_joueur == JOUEUR_0 && coord_darrivee.x > 6))
  368.    {
  369.     if (tolower(partie->tablier[coord_darrivee.x][coord_darrivee.y].type == 'p') && (coord_darrivee.x == 1 || coord_darrivee.x ==9))
  370.     {
  371.      changer_statut(&partie->tablier[coord_darrivee.x][coord_darrivee.y]);
  372.      bool_promotion = VRAI;
  373.     }
  374.     else if ((partie->tablier[coord_darrivee.x][coord_darrivee.y].type == 'l') && (coord_darrivee.x == 1) || (partie->tablier[coord_darrivee.x][coord_darrivee.y].type == 'L' && coord_darrivee.x == 9))
  375.     {
  376.      changer_statut(&partie->tablier[coord_darrivee.x][coord_darrivee.y]);
  377.      bool_promotion = VRAI;
  378.     }
  379.     else if ((partie->tablier[coord_darrivee.x][coord_darrivee.y].type == 'n' && coord_darrivee.x < 3) || (partie->tablier[coord_darrivee.x][coord_darrivee.y].type == 'N' && coord_darrivee.x > 7))
  380.     {
  381.      changer_statut(&partie->tablier[coord_darrivee.x][coord_darrivee.y]);
  382.      bool_promotion = VRAI;
  383.     }
  384.     else
  385.     {
  386.      do
  387.      {
  388.       printf("voulez vous proumouvoire la piece jouee ? \n si oui tappez : 1\n si non tappez : 0\n" );
  389.       scanf("%d",&reponse);
  390.      }while(reponse != VRAI && reponse != FAUX);
  391.  
  392.      if (reponse)
  393.      {
  394.       changer_statut(&partie->tablier[coord_darrivee.x][coord_darrivee.y]);
  395.       bool_promotion = VRAI;
  396.  
  397.      }
  398.     }
  399.  
  400.    }
  401.   }
  402.  }
  403.  
  404.  nv_coup->promotion=bool_promotion;
  405.  nv_coup->capture=bool_capture;
  406.  nv_coup->depart=coord_de_depart;
  407.  nv_coup->arrivee=coord_darrivee;
  408.  
  409.  ajouter_coup_fin(partie,nv_coup);
  410. }
  411. }
  412.  
  413. /************************************************_____________________________******************************************/
  414.  
  415. void annuler_deplacement(partie_t *partie)
  416. {
  417. coup_t *dernier_coup=partie->coup_joue.fin;
  418.  
  419. if (partie->coup_joue.nb_de_coups != 1)
  420. {
  421.  dernier_coup->precedant->suivant=NULL;
  422.  partie->coup_joue.fin=dernier_coup->precedant;
  423. }
  424.  
  425. partie->coup_joue.nb_de_coups--;
  426.  
  427.  
  428. modifier_case(partie,partie->tablier[dernier_coup->arrivee.x][dernier_coup->arrivee.y], dernier_coup->depart);
  429. modifier_case(partie,partie->tablier[T-1][0],dernier_coup->arrivee);
  430.  
  431. if (dernier_coup->capture == VRAI)
  432. {
  433.  dernier_coup = liste_capture->debut;
  434.  modifier_case(partie,partie->tablier[liste_capture->debut->coord_capture.x][liste_capture->debut->coord_capture.y],dernier_coup->arrivee);
  435.  modifier_case(partie,partie->tablier[T-1][0],liste_capture->debut->coord_capture);
  436.  liste_capture->debut=dernier_coup->suivant;
  437.  dernier_coup->suivant=NULL;
  438.  liste_capture->T--;
  439.  free(dernier_coup);
  440.  
  441.  partie->tablier[dernier_coup->arrivee.x][dernier_coup->arrivee.y].joueur=(partie->bool_joueur+1)%2;
  442. }
  443. if (isupper(partie->tablier[dernier_coup->arrivee.x][dernier_coup->arrivee.y].type))
  444. {
  445.  partie->tablier[dernier_coup->arrivee.x][dernier_coup->arrivee.y].type=tolower(partie->tablier[dernier_coup->arrivee.x][dernier_coup->arrivee.y].type);
  446. }
  447. else
  448. {
  449.  partie->tablier[dernier_coup->arrivee.x][dernier_coup->arrivee.y].type=toupper(partie->tablier[dernier_coup->arrivee.x][dernier_coup->arrivee.y].type);
  450. }
  451.  
  452. if (dernier_coup->promotion==PIECE_PROMUE)
  453. {
  454. changer_statut(&partie->tablier[dernier_coup->depart.x][dernier_coup->depart.y]);
  455. }
  456.  
  457. free(dernier_coup);
  458.  
  459. while(partie->bool_joueur==partie->tablier[dernier_coup->arrivee.x][dernier_coup->arrivee.y].joueur)
  460. {
  461. dernier_coup=extraire_fin_liste(&partie->coup_joue);
  462. changer_statut(&partie->tablier[dernier_coup->arrivee.x][dernier_coup->arrivee.y]);
  463.  
  464. free(dernier_coup);
  465. }
  466. }
  467.  
  468. //**************************************************_________________________________***************************//
  469. int* saisie_case() {
  470.     int* saisie = calloc(6, sizeof(int));
  471. printf("Veuillez entrer l'un des choix suivants :\n\t1. Effectuer un deplacement\n\t2. Annuler le dernier deplacement\n\t3. Quitter la partie\n...? " );
  472. scanf("%u", &saisie[0]);
  473. while (saisie[0] < 1 || saisie[0] > 3)
  474.         {  printf("Erreur, aucun numero correspondant, veuillez recommencer\n...? " );
  475.  scanf("%u", &saisie[0]);
  476. }
  477.  
  478. if (saisie[0] == 1) {
  479.  printf("Entrez les coordonnees de depart et d'arrivee sous forme de quatre entiers consecutifs et de 1 pour une demande de promotion avant le deplacement, qui sera attribue seulement si possible, 0 sinon\nExemple : 2 5 3 6 1 deplace la piece situee en (2, 5) en (3, 6) avec une demande de promotion\n...? " );
  480.  scanf("%u %u %u %u %u", &saisie[1], &saisie[2], &saisie[3], &saisie[4], &saisie[5]);
  481.  while (saisie[1] > 10 || saisie[2] > 10 || saisie[3] > 10 || saisie[4] > 10 || saisie[5] > 1) {
  482.   printf("Erreur toutes les coordonnees doivent etre comprises entre 0 et 10 et la demande de promotion 1 ou 0, entrez a nouveau\n...? " );
  483.   scanf("%u %u %u %u %u", &saisie[1], &saisie[2], &saisie[3], &saisie[4], &saisie[5]);
  484.  }
  485. }
  486.  
  487. return saisie;
  488. }
  489.  
  490. //********************************************______________________________________************************************//
  491.  
  492. partie_t *partie_creer()
  493. {
  494.     partie_t *partie =  malloc(sizeof(*partie_t));
  495.  
  496.     partie->coup_joue.debut=NULL;
  497.     partie->coup_joue.fin=NULL;
  498.     partie->coup_joue.nb_de_coups=0;
  499.  
  500.     return partie;
  501. }


 
Merci par avance pour votre aide  


---------------
G-Orwell
mood
Publicité
Posté le 20-04-2017 à 22:03:53  profilanswer
 

n°2299472
gilou
Modérateur
Modzilla
Posté le 20-04-2017 à 23:06:06  profilanswer
 

piece_t piece_creer(int joueur, int type, int statut)
{
piece_t piece;
piece.joueur=joueur;
piece.type=type;
piece.statut=statut;
return piece;
}
 
Sauf que tu ne crées rien ici.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2299473
rat de com​bat
attention rongeur méchant!
Posté le 20-04-2017 à 23:09:26  profilanswer
 

Eh ben, en voila du code.

 

Tu as activé les warnings sur ton compilateur? Obligatoire!!!

 

Premier problème:
>#define T 11
>liste_capture->T
Heu... Ca risque pas de fonctionner ça. :o C'est peut-être "liste_capture->taille"? J'ai pas vérifié si c'est logique.

 

edit: Envoyé trop tôt...

 

Ce machin

Code :
  1. if (partie->tablier[coord_darrivee.x][coord_darrivee.y].type != 'G' && partie->tablier[coord_darrivee.x][coord_darrivee.y] != 'K' && partie->tablier[coord_darrivee.x][coord_darrivee.y].type != 'g' && partie->tablier[coord_darrivee.x][coord_darrivee.y] != 'k')

il lui manque des bouts, je suppose que c'est

Code :
  1. if (partie->tablier[coord_darrivee.x][coord_darrivee.y].type != 'G' && partie->tablier[coord_darrivee.x][coord_darrivee.y].type != 'K' && partie->tablier[coord_darrivee.x][coord_darrivee.y].type != 'g' && partie->tablier[coord_darrivee.x][coord_darrivee.y].type != 'k')

.

 

Et tu peux apparamment pas faire un ++ sur un #define.

 

Après le reste à toi de voir, j'ai pas le temps ni l'envie de comprendre 500 lignes de code. :o

 

Active les warnings (GCC: -Wall) (et prends les en compte :o )


Message édité par rat de combat le 20-04-2017 à 23:14:06
n°2299475
g-orwell
Posté le 20-04-2017 à 23:26:23  profilanswer
 

Merci à vous deux.
Merci à toi rat de combat.
il manquait en effet .type  à la ligne que tu as indiqué.


---------------
G-Orwell

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Compilation error: invalid operands to binary != ...

 

Sujets relatifs
[Java] Erreur CompilationNom avec espace -----> problème de compilation
[Help] Compilation cross plateform (RaspberryPi / Ubuntu)problème invalid syntaxe
Dupral erreur internal server error 500 après installation?compilation de gcc 5.3.0
erreur soap InvalidSecurityAn error occurred when verifying securityErreur de compilation, incompatibilité de type
error(MSB3073) dans visual studio a partir d'unreal engine 
Plus de sujets relatifs à : Compilation error: invalid operands to binary != ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR