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

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. 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.
    2. je vois pas désolé :s
      1. enfin merci m avoir aide
        la je vais essaye d affiche pour voir si sa fonctionne bien
    3. 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
    4. 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
    5. 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;
        }

        ???
    6. 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