Probleme en structure
stephen
-
Pacorabanix Messages postés 4122 Date d'inscription Statut Membre Dernière intervention -
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;
}
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;
}
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 url - Guide
- Trouvez l'erreur dans la structure du document et corrigez-la. - Forum Word
- Pdf structure 40 - Forum PDF
7 réponses
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;
}
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 :)
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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à ;)
#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.
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.
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.
menurapide=(*menu)malloc(sizeof(menu));
ecriture pas conforme
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.
menurapide->entree = 'nuggets';
reexplique stp