Partage
  • Partager sur Facebook
  • Partager sur Twitter

L'expression doit être modifiable

    4 juin 2021 à 18:10:37

    Voila, j'ai l'erreur suivante : "L'expression doit être modifiable"

    Je ne comprends pas trop ce que ça veut dire, est ce que ça signifie que les deux variables ne sont pas du même type ? Bref je ne comprends pas, si vous avez des pistes je suis preneur 

    Voila mon code 

    //Bibliothèques
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    struct Player { //Identité des joueurs
    	int id;
    	signed char playerName[256];
    	int lp;
    	int hp;
    	int mp;
    	int def;
    	int attaques[4][2];
    };
    
    struct Mob {
    	int idMob;
    	signed char nameMob [256];
    	int lpMob;
    	int hpMob;
    	int mpMob;
    };
    
    int calculeDega(int vie ,int force,signed char entite[256]) {
    	int cal =  vie - force;
    	printf("Vie restante au %s: %d\n",entite, vie);
    	return cal;
    }
    
    
    //Variables global
    signed char attklist[5][256] = { "Lance flamme", "Tonnerre", "Jet d'eau", "Force pur", "Appelle forestier" };
    int dega[5] = { 10,15,16,18,10 };
    int choixAtt[4][2];
    
    //On présente un joueur
    void presentation(signed char X1[256],int X2, int X3, int X4) {
    	printf("Bonjour %s, votre vie est de %d, vos degats sont de %d et votre mana de %d\n",X1,X2,X3,X4);
    }
    
    //On affiche et donne le choix au joueurs de choisir 4 attaques
    void listeAttk() {
    	int size = sizeof(attklist) / sizeof(*attklist);
    	printf("Voici une liste d'attaque, veuillez en choisir 4 : ");
    	for (int i = 0; i < size; i++) {
    		printf("\nL'attaque numero %d, %s\n", i + 1, attklist[i]);
    	}
    	printf("Entrez notre attaque 1 : ");
    	scanf_s("%d", &choixAtt[0][0]);
    	choixAtt[0][1] = dega[choixAtt[0][0] - 1];
    
    	printf("\nEntrez notre attaque 2 : ");
    	scanf_s("%d", &choixAtt[1][0]);
    	choixAtt[1][1] = dega[choixAtt[1][0] - 1];
    
    	printf("\nEntrez notre attaque 3 : ");
    	scanf_s("%d", &choixAtt[2][0]);
    	choixAtt[2][1] = dega[choixAtt[2][0] - 1];
    
    	printf("\nEntrez notre attaque 4 : ");
    	scanf_s("%d", &choixAtt[3][0]);
    	choixAtt[3][1] = dega[choixAtt[3][0] - 1];
    
    }
    
    
    
    _Bool isAlive(int A1,int A2) {
    	if (A1 > 0) {
    		return 1;
    	}
    	else {
    		printf("GAME OVER\n");
    		if (A2 == 1) {
    			printf("YOU LOOSE");
    		}
    		else {
    			printf("YOU WIN");
    		}
    		return 0;
    	}
    }
    
    int main(int argc, char** argv) {
    	//Déclaration de variables
    	signed char name[256];
    	int lpp;
    	int mpp;
    	int hpp;
    	int nullat[4];
    	
    
    	//Code
    	printf("Quel est votre nom ? ");
    	scanf_s("%s", name, 256);
    	printf("\nQuels sont vos points de vie ? ");
    	scanf_s("%d", &lpp);
    	printf("\nQuels sont vos points de mana ? ");
    	scanf_s("%d", &mpp);
    	printf("\nQuel est votre niveau de force ? ");
    	scanf_s("%d", &hpp);
    	listeAttk();
    
    	struct Player p1 = { 1 , "", 0 , 0 , 0 , 60 , nullat };
    	struct Mob m1 = {1,"Goblin",50,10,5};
    	p1.hp = hpp;
    	p1.playerName = name;
    	p1.lp = lpp;
    	p1.mp = mpp;
    	p1.attaques = choixAtt;
    
    	
    
    	while ((isAlive(p1.lp, 1)) && (isAlive(m1.lpMob, 2))) {
    		p1.lp = calculeDega(p1.lp, m1.hpMob,"joueur");
    		m1.lpMob = calculeDega(m1.lpMob, p1.hp, "mob");
    	}
    	
    
    	//Fin
    	return 0;
    }

    L'erreur s'affiche ligne 107 et 110

    • Partager sur Facebook
    • Partager sur Twitter
      4 juin 2021 à 18:20:39

      Salut,

      Il faut utilise strcpy() pour copier des chaînes de caractères. p1.playerName est un pointeur constant auquel tu essaie d'attribuer la valeur d'un autre pointeur.

      • Partager sur Facebook
      • Partager sur Twitter

      Bonhomme !! | Jeu de plateforme : Prototype.

        4 juin 2021 à 18:37:51

        @drx merci beaucoup, c'est effectivement le cas merci !!!
        • Partager sur Facebook
        • Partager sur Twitter
          4 juin 2021 à 18:40:25

          et ligne 110 pour copier des tableaux, c'est élément par élément ou alors avec memcpy.
          • Partager sur Facebook
          • Partager sur Twitter

          L'expression doit être modifiable

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown