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
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
A voir également:
- Probleme en structure
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Structure d'un rapport de stage - Guide
- Structure adresse ip - Guide
- La structure a besoin d'un nettoyage ✓ - Forum Debian
- L'importateur de fichiers a détecté une incohérence dans la structure de fichier premiere pro - Forum Montage et acquisition vidéo
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
12 janv. 2010 à 19:56
Bonjour,
En gras ce qui ne va pas, il y aura peut etre encore quelques erreurs!
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; }
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
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 :)
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 :)
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
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.
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.
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
12 janv. 2010 à 20:53
euh je sais pas.. et si tu mets :
menurapide->entree ='nuggets'; ?
menurapide->entree ='nuggets'; ?
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
12 janv. 2010 à 21:13
je vois pas désolé :s
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
12 janv. 2010 à 23:42
pour assigner une chaine de caractère il faut utiliser strcpy(destination, source) :
ça marche bien là ;)
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à ;)
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
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.
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
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
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
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
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 :
il faut donner deux chaines pour ton plat
ex :
qu'est-ce que "tonPlat" dans ce cas ?
c'est menurapide->platprincipal
ainsi la ligne :
serait plutot un truc dans le genre que ce que tu voudrais faire.
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.
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
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
tu aurais pu faire tout simplement :
Pas besoin de créer "dynamiquement" ta structure ici, avec un pointeur et tout ça.
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.
12 janv. 2010 à 20:09
12 janv. 2010 à 20:20
menurapide=(*menu)malloc(sizeof(menu));
ecriture pas conforme
12 janv. 2010 à 20:26
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.
12 janv. 2010 à 20:31
menurapide->entree = 'nuggets';
reexplique stp