Probleme en structure

stephen -  
Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, je commence en language c et j ai un programme a faire
d affecter la variable menurapide de type menu au menu suivant
entree = nuggets
platprincipal= rapidburger-frites;
dessert=glace;
prix= 10;

mais quand je fait le programme ca fait erreur
voici le programme

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef struct
{
char viandeoupoisson[20];
char accompagnement[20];
}plat;

typedef struct menu
{
char entree[20];
plat platprincipal;
char dessert[20];
float prix;
}menu;

int main(void)
{

struct menu *menurapide;
menurapide=malloc(sizeof(struct menu));
menurapide->entree = {'nuggets'};
//menurapide->platprincipal= rapidburger-frites;
//menurapide->dessert=glace;
menurapide->prix= 10;
}
Configuration: Windows Vista
Firefox 3.5.7

7 réponses

  1. rom56 Messages postés 309 Statut Membre 88
     
    Bonjour,

    En gras ce qui ne va pas, il y aura peut etre encore quelques erreurs!
    #include<stdio.h> 
    #include<stdlib.h> 
    #include<malloc.h> 
    
    typedef struct plat
    { 
    char viandeoupoisson[20]; 
    char accompagnement[20]; 
    }plat; 
    
    typedef struct menu 
    { 
    char entree[20]; 
    plat platprincipal; 
    char dessert[20]; 
    float prix; 
    }menu; 
    
    int main(void) 
    { 
    
    menu *menurapide; // maitenant tu as creer le type "menu" donc tu l'utilises comme un autre type
    menurapide=(*menu)malloc(sizeof(menu));  // pareil, et tu caste en (menu*) ce n'est pas obligatoire
    menurapide->entree = 'nuggets'; 
    //menurapide->platprincipal= 'rapidburger-frites'; 
    //menurapide->dessert=glace; 
    menurapide->prix= 10; 
    }
    0
    1. stephen
       
      ok j essaye merci
      0
      1. stephen > stephen
         
        ah ca me dit qu il y a des erreurs
        menurapide=(*menu)malloc(sizeof(menu));
        ecriture pas conforme
        0
    2. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      menurapide=(*menu)malloc(sizeof(menu)); // pareil, et tu caste en (menu*)

      non, il n'y a pas besoin de cast, il se fait tout seul implicitement, malloc retourne un pointeur void* et ce type est automatiquement casté, pas besoin de le faire explicitement.
      0
      1. stephen > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        eu pas compris ce que tu voulais m expliquer enfaite ou j avais le blem c etais avec
        menurapide->entree = 'nuggets';
        reexplique stp
        0
  2. rom56 Messages postés 309 Statut Membre 88
     
    Re,

    Le cast est implicite je suis d'accord mais il est conseillé de le faire. En gros, fais comme dis Pacorabanix pour ne pas t'embrouiller.

    Normalement menurapide->entree = 'nuggets';
    devrais fonctionner sans problème :)
    0
    1. stephen
       
      donc si je comprend bien je fait comme ca
      int main(void)
      {

      struct menu *menurapide;
      menurapide=(*menu)malloc(sizeof(menu));
      menurapide->entree = 'nuggets';
      //menurapide->platprincipal= rapidburger-frites;
      //menurapide->dessert=glace;
      menurapide->prix= 10;
      }


      ???
      0
  3. rom56 Messages postés 309 Statut Membre 88
     
    Oui tu peux faire ça, ou sinon tu peux enlever le caste sur la 2ème ligne :
    int main(void)
    {

    struct menu *menurapide;
    menurapide = malloc(sizeof(menu));
    menurapide->entree ="nuggets";
    //menurapide->platprincipal= rapidburger-frites;
    //menurapide->dessert=glace;
    menurapide->prix= 10;
    }

    met plutot des double quote sur la ligne "nuggets", les simples quote étant souvent pour un seul caractère.
    0
    1. stephen
       
      ok
      j essaye merci
      0
    2. stephen
       
      dsl
      pour menurapide->entree ="nuggets"; et ca dit
      error C2106: '=' : l'opérande gauche doit être une l-value
      0
  4. rom56 Messages postés 309 Statut Membre 88
     
    euh je sais pas.. et si tu mets :
    menurapide->entree ='nuggets'; ?
    0
    1. stephen
       
      meme chose
      :(
      0
    2. stephen
       
      a trouve
      j ai ecrit egale egale
      et ca fait pas compris pk mais ca a fait
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. rom56 Messages postés 309 Statut Membre 88
     
    je vois pas désolé :s
    0
    1. stephen
       
      enfin merci m avoir aide
      la je vais essaye d affiche pour voir si sa fonctionne bien
      0
  7. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
     
    pour assigner une chaine de caractère il faut utiliser strcpy(destination, source) :

    int main(void) 
    { 
        menu* menurapide = malloc(sizeof(menu));
        
        strcpy(menurapide->entree, "nuggets"); 
        
        menurapide->prix= 10; 
        
        printf("entree : %s   prix = %f", menurapide->entree, menurapide->prix);
        
        getch();
    }


    ça marche bien là ;)
    0
    1. stephen
       
      non ca dit
      'strcpy' non défini(e) ; extern retournant int pris par défaut
      1>c:\users\stephen\documents\visual studio 2008\projects\adn.c(42) : warning C4013: 'getch' non défini(e) ; extern retournant int pris par défaut
      0
      1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > stephen
         
        #include<stdio.h> 
        #include<stdlib.h> 
        #include<malloc.h> 
        
        typedef struct plat
        { 
            char viandeoupoisson[20]; 
            char accompagnement[20]; 
        }plat; 
        
        typedef struct menu 
        { 
            char entree[20]; 
            plat platprincipal; 
            char dessert[20]; 
            float prix; 
        } menu; 
        
        int main(void) 
        { 
            menu* menurapide = malloc(sizeof(menu));
            
            strcpy(menurapide->entree, "nuggets"); 
            
            menurapide->prix= 10; 
            
            printf("entree : %s   prix = %f", menurapide->entree, menurapide->prix);
            
            getch();
        }
        


        ceci compile chez moi.
        0
      2. stephen > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        Oui merci ca fait
        maintennt je demande si mon proff a pas fait une erreur car

        plat platprincipal; na pas valeur char ou int

        si c est pas une erreur comment affecter la valeur rapidburger-frutes ?
        j ai fait cela menurapide->platprincipal= rapidburger-frites;
        mais ca dit erreu
        0
      3. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        menurapide->platprincipal= rapidburger-frites;

        ceci ne veut rien dire du point de vue syntaxe C++.

        Reprenons : Qu'est ce que "platprincipal" ? Une variable de type "plat".
        Comme plat est une struct :
        typedef struct plat
        { 
            char viandeoupoisson[20]; 
            char accompagnement[20]; 
        }plat; 


        il faut donner deux chaines pour ton plat

        ex :
        strcpy(tonPlat.viandeoupoisson, "Hamburger");

        qu'est-ce que "tonPlat" dans ce cas ?
        c'est menurapide->platprincipal

        ainsi la ligne :
        strcpy(menurapide->platprincipal.viandeoupoisson, "Hamburger");

        serait plutot un truc dans le genre que ce que tu voudrais faire.
        0
      4. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663 > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        d'atre part, j'aimerais faire une remarque. Il n'y a pas besoin de malloc dans ton programme.

        au lieu de
        menu * variable;
        variable= malloc (...)
        
        ... variable->entree ...
        ... variable->platprincipale ...



        tu aurais pu faire tout simplement :

        menu variable;
        
        ... variable.entree ...
        ... variable.platprincipale ...



        Pas besoin de créer "dynamiquement" ta structure ici, avec un pointeur et tout ça.
        0
  8. stephen
     
    oui merci ca fait
    maintennt je demande si mon proff a pas fait une erreur car

    plat platprincipal; na pas valeur char ou int

    si c est pas une erreur comment affecter la valeur rapidburger-frutes ?
    j ai fait cela mais ca dit erreu
    0