Probleme en structure

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. 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; 
    }
    1. ok j essaye merci
    2. @stephenah ca me dit qu il y a des erreurs
      menurapide=(*menu)malloc(sizeof(menu));
      ecriture pas conforme
    3. 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.
    4. @Pacorabanixeu pas compris ce que tu voulais m expliquer enfaite ou j avais le blem c etais avec
      menurapide->entree = 'nuggets';
      reexplique stp
  2. 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 :)
    1. 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;
      }

      ???
  3. 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.
    1. ok
      j essaye merci
    2. dsl
      pour menurapide->entree ="nuggets"; et ca dit
      error C2106: '=' : l'opérande gauche doit être une l-value
  4. euh je sais pas.. et si tu mets :
    menurapide->entree ='nuggets'; ?
    1. meme chose
      :(
    2. a trouve
      j ai ecrit egale egale
      et ca fait pas compris pk mais ca a fait
  5. je vois pas désolé :s
    1. enfin merci m avoir aide
      la je vais essaye d affiche pour voir si sa fonctionne bien
  6. 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à ;)
    1. 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
    2. @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.
    3. @PacorabanixOui 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
    4. @Pacorabanixmenurapide->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.
    5. @Pacorabanixd'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.
  7. 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