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;
}

7 réponses

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
stephen
 
ok j essaye merci
0
stephen > stephen
 
ah ca me dit qu il y a des erreurs
menurapide=(*menu)malloc(sizeof(menu));
ecriture pas conforme
0
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
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
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
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
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
stephen
 
ok
j essaye merci
0
stephen
 
dsl
pour menurapide->entree ="nuggets"; et ca dit
error C2106: '=' : l'opérande gauche doit être une l-value
0
rom56 Messages postés 309 Statut Membre 88
 
euh je sais pas.. et si tu mets :
menurapide->entree ='nuggets'; ?
0
stephen
 
meme chose
:(
0
stephen
 
a trouve
j ai ecrit egale egale
et ca fait pas compris pk mais ca a fait
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rom56 Messages postés 309 Statut Membre 88
 
je vois pas désolé :s
0
stephen
 
enfin merci m avoir aide
la je vais essaye d affiche pour voir si sa fonctionne bien
0
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
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
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
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
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
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
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