Probleme en structure

Fermé
stephen - 12 janv. 2010 à 19:47
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 13 janv. 2010 à 21:55
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 300 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 25 mai 2012 88
12 janv. 2010 à 19:56
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
ok j essaye merci
0
stephen > stephen
12 janv. 2010 à 20:20
ah ca me dit qu il y a des erreurs
menurapide=(*menu)malloc(sizeof(menu));
ecriture pas conforme
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
12 janv. 2010 à 20:26
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 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013
12 janv. 2010 à 20:31
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 300 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 25 mai 2012 88
12 janv. 2010 à 20:34
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
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 300 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 25 mai 2012 88
12 janv. 2010 à 20:45
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
ok
j essaye merci
0
dsl
pour menurapide->entree ="nuggets"; et ca dit
error C2106: '=' : l'opérande gauche doit être une l-value
0
rom56 Messages postés 300 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 25 mai 2012 88
12 janv. 2010 à 20:53
euh je sais pas.. et si tu mets :
menurapide->entree ='nuggets'; ?
0
meme chose
:(
0
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 300 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 25 mai 2012 88
12 janv. 2010 à 21:13
je vois pas désolé :s
0
enfin merci m avoir aide
la je vais essaye d affiche pour voir si sa fonctionne bien
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660
12 janv. 2010 à 23:42
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
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 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660 > stephen
13 janv. 2010 à 19:27
#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 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013
13 janv. 2010 à 21:03
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 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660 > Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013
13 janv. 2010 à 21:51
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 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 660 > Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013
13 janv. 2010 à 21:55
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
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