Structure en c
Résolu/Fermé
donina
Messages postés
3
Date d'inscription
mercredi 26 décembre 2007
Statut
Membre
Dernière intervention
12 juin 2008
-
26 déc. 2007 à 02:08
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 28 déc. 2007 à 15:11
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 28 déc. 2007 à 15:11
A voir également:
- Structure en c
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Structure d'un rapport de stage - Guide
- Dans la table des matières du document à télécharger, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? - Forum Word
- Table des matières ne prenant pas en compte tous mes titres - Forum Word
- Dans son restaurant, igor utilise une application pour gérer les réservations. voici une représentation graphique du schéma (structure) de la base de données de l’application. répondez aux questions. - Forum Antivirus
4 réponses
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
26 déc. 2007 à 03:31
26 déc. 2007 à 03:31
pour initialiser avec les pointeurs tu peux faire comme ça
typedef struct personnes { /* définition du tableau de structures */ int id; char *nom; char *prenom; } personne; void init(personne carnet[],int np) // initialisation du tableau de structures { int i; for (i=0;i<np;i++) { carnet[i].nom=(char *) malloc(20); carnet[i].prenom=(char *) malloc(20); carnet[i].id=0; carnet[i].nom=" "; carnet[i].prenom=" "; } }
Bonjour donina
Le compilateur sort beaucoup d'erreurs... Allons-y calmement
1- structure ou pointeur sur structure
carnet[i]->id n'est pas correct. Il faut utiliser la -> quand tu as un pointeur sur une structure et le point quand tu as la structure elle-même. Ici, carnet[i] désigna la structure elle-même, il faut utiliser le point : carnet[i].id.
Même chose bien sûr pour les autres champs de la structure
2- affectation de tableau
Les champs nom et prenom désignent des tableau de caractères. En C, tu ne peux pas donner une valeur à un tableau avec l'affectation simple '='. Si ce tableau doit contenir une chaîne de caractères, le plus simple est d'utiliser strcpy :
strcpy (carnet[i].nom,"");
commençons par ça
Le compilateur sort beaucoup d'erreurs... Allons-y calmement
1- structure ou pointeur sur structure
carnet[i]->id n'est pas correct. Il faut utiliser la -> quand tu as un pointeur sur une structure et le point quand tu as la structure elle-même. Ici, carnet[i] désigna la structure elle-même, il faut utiliser le point : carnet[i].id.
Même chose bien sûr pour les autres champs de la structure
2- affectation de tableau
Les champs nom et prenom désignent des tableau de caractères. En C, tu ne peux pas donner une valeur à un tableau avec l'affectation simple '='. Si ce tableau doit contenir une chaîne de caractères, le plus simple est d'utiliser strcpy :
strcpy (carnet[i].nom,"");
commençons par ça
re- Bonjour
comment écrire un .h avec la définition de la structure
ça, il n'y a pas plus facile.
Tu recopies ta définition dans un fichier que tu appelles comme tu veux avec une extension en .h, par exemple personnes.h
Dans les fichier .c ou .cpp où tu l'utilises, tu ajoutes #include "personnes.h" (et tu enlèves la définition, bien sur)
Il n'est pas recommandé de créer un fichier .h pour chaque type que tu crées, ça devient vite la pagaille. Regroupe les définitions qui ont un certain rapport entre elles ( #define constantes, prototypes de fonctions, structures..)
comment écrire un .h avec la définition de la structure
ça, il n'y a pas plus facile.
Tu recopies ta définition dans un fichier que tu appelles comme tu veux avec une extension en .h, par exemple personnes.h
Dans les fichier .c ou .cpp où tu l'utilises, tu ajoutes #include "personnes.h" (et tu enlèves la définition, bien sur)
Il n'est pas recommandé de créer un fichier .h pour chaque type que tu crées, ça devient vite la pagaille. Regroupe les définitions qui ont un certain rapport entre elles ( #define constantes, prototypes de fonctions, structures..)
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
26 déc. 2007 à 15:48
26 déc. 2007 à 15:48
oula.. merci le pere en effet je n'avais pas l'esprit tres claire c'est vrai que pour les chaine de caractere le "=" n'est pas correct
fais comme le pere t'as dit utilise strcpy() pour initialiser dans ta fonction init et n'ouble pas d'inclure la bibliotheque string.h au debut
ensuite dans ta fonction entree() mon compilateur n'aime pas trop gets() je te conseille d'utiliser un simple scanf
voila avec ces quelques corrections ton programme fonctionne chez moi...
bonne chance ;)
fais comme le pere t'as dit utilise strcpy() pour initialiser dans ta fonction init et n'ouble pas d'inclure la bibliotheque string.h au debut
for (i=0;i<np;i++) { carnet[i].id=0; strcpy(carnet[i].nom," "); strcpy(carnet[i].prenom," "); }
ensuite dans ta fonction entree() mon compilateur n'aime pas trop gets() je te conseille d'utiliser un simple scanf
scanf( "%d""%s""%s",&carnet[i].id,&carnet[i].nom,&carnet[i].prenom);
voila avec ces quelques corrections ton programme fonctionne chez moi...
bonne chance ;)
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
>
donina
28 déc. 2007 à 15:11
28 déc. 2007 à 15:11
oui c'est normal si tu veux initialiser avec les pointeurs faut utiliser des malloc avant
si tu as plus de probleme n'oublie pas de metre en resolu ;)
si tu as plus de probleme n'oublie pas de metre en resolu ;)
26 déc. 2007 à 12:19
Tu es distrait ce matin ,mype. Des abus hier ?
suivi de
ne fait probablement pas ce que tu crois.
La première ligne alloue de la mémoire et met l'adresse de cette mémoire dans carnet[i].nom
La seconde ligne change carnet[i].nom pour pointer sur une zone initialisée à " ". L'adresse de la mémoire allouée précédemment est perdue. Le malloc n'a servi a rien. Pire, il crée "un fuite de mémoire" puisqu'on ne saura jamais en faire un free().
strcpy (carnet[i].nom," "); serait sûrement préférable
idem pour prénom, bien sûr
26 déc. 2007 à 12:31