Problème d'enregistrements dans le langage C
Résolu/Fermé
inventrice
Messages postés
8
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
14 juin 2008
-
13 juin 2008 à 15:15
inventrice Messages postés 8 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 14 juin 2008 - 14 juin 2008 à 16:21
inventrice Messages postés 8 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 14 juin 2008 - 14 juin 2008 à 16:21
A voir également:
- Problème d'enregistrements dans le langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Enregistrer le son du pc - Guide
5 réponses
doctormad
Messages postés
430
Date d'inscription
mercredi 28 novembre 2007
Statut
Membre
Dernière intervention
2 avril 2015
99
13 juin 2008 à 15:29
13 juin 2008 à 15:29
Salut,
Je veux bien te croire que ça marche pas, à moins que tes nom, prenom et adresse ne fassent qu'un caractère ^^
Donc
En outre (j'aime bien le placer celui là XD) si tu fais avec des tailles fixes comme ton tableau de 20 personnes tu dois faire des controles partout pour voir si ca depasse pas sinon effet de bord garanti.
L'idéal serait donc d'utiliser des pointeurs pour tout les champs dont tu ne connais pas la taille a l'avance, comme ton nombre de personnes ou la longeur de leur nom.
Je veux bien te croire que ça marche pas, à moins que tes nom, prenom et adresse ne fassent qu'un caractère ^^
Donc
typedef struct { char nom[50]; char prenom[50]; char adresse[200]; int age; }personne;
En outre (j'aime bien le placer celui là XD) si tu fais avec des tailles fixes comme ton tableau de 20 personnes tu dois faire des controles partout pour voir si ca depasse pas sinon effet de bord garanti.
L'idéal serait donc d'utiliser des pointeurs pour tout les champs dont tu ne connais pas la taille a l'avance, comme ton nombre de personnes ou la longeur de leur nom.
inventrice
Messages postés
8
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
14 juin 2008
12
13 juin 2008 à 23:21
13 juin 2008 à 23:21
salut
puisque j'ai fait %s ça veut dire que j'ai entré une chaine de caractères
mais c'est pas ça le problème
le problème est dans la boucle for parce que quand je fais entrer les informations de la première personne il sort directement de la boucle sans continuer les autres personnes
merci de votre aide comme même
à propos, je ne sais pas comment utiliser les pointeurs ^^
puisque j'ai fait %s ça veut dire que j'ai entré une chaine de caractères
mais c'est pas ça le problème
le problème est dans la boucle for parce que quand je fais entrer les informations de la première personne il sort directement de la boucle sans continuer les autres personnes
merci de votre aide comme même
à propos, je ne sais pas comment utiliser les pointeurs ^^
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
14 juin 2008 à 09:43
14 juin 2008 à 09:43
Salut,
1.
puisque j'ai fait %s ça veut dire que j'ai entré une chaine de caractères
mais c'est pas ça le problème
Oui, c'est un de problèmes ;-)
ce que t'as dit doctormad est vrai est ça n'a rien à avoir avec %s
il s'agit de stockage des données.
quand tu fait char nom, la variable nom ne pourra contenir qu'un seul caractère (si tu utilises que des noms chinois ça pourra marcher ;-)) mai pas pour beaucoup des noms ;-)
2.
de la première personne il sort directement de la boucle sans continuer les autres personnes
Normal. En faite tu ne sors pas tout simplement de la boucle, mais tu as un message d'erreur que tu as oublié de nous donner.
Il s'agit d'une erreur de segmentation à cause de
printf("entrez le nombre de personnes\n");
scanf("%d",np);
il faut écrire
1.
puisque j'ai fait %s ça veut dire que j'ai entré une chaine de caractères
mais c'est pas ça le problème
Oui, c'est un de problèmes ;-)
ce que t'as dit doctormad est vrai est ça n'a rien à avoir avec %s
il s'agit de stockage des données.
quand tu fait char nom, la variable nom ne pourra contenir qu'un seul caractère (si tu utilises que des noms chinois ça pourra marcher ;-)) mai pas pour beaucoup des noms ;-)
2.
de la première personne il sort directement de la boucle sans continuer les autres personnes
Normal. En faite tu ne sors pas tout simplement de la boucle, mais tu as un message d'erreur que tu as oublié de nous donner.
Il s'agit d'une erreur de segmentation à cause de
printf("entrez le nombre de personnes\n");
scanf("%d",np);
il faut écrire
printf("entrez le nombre de personnes\n"); scanf("%d",&np);
inventrice
Messages postés
8
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
14 juin 2008
12
14 juin 2008 à 12:22
14 juin 2008 à 12:22
merci beaucoup lami ^^
&np était la principale origine du problème
maintenant je peux entrer les informations de np personnes
merci encore de votre aide ^^
&np était la principale origine du problème
maintenant je peux entrer les informations de np personnes
merci encore de votre aide ^^
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
14 juin 2008 à 09:46
14 juin 2008 à 09:46
Re,
encore deux p'tits conseils
declare tes variables à l'interieur de main (il faut eviter les variables globales ;-))
Pour les champ char, si jamais tu auras des espaces vaut fgets au lieu de scanf.
encore deux p'tits conseils
declare tes variables à l'interieur de main (il faut eviter les variables globales ;-))
#include<stdio.h> #include<conio.h> typedef struct { char nom[50]; char prenom[50]; char adresse[100]; int age; }personne; main() { personne t[20]; int i,np,sat; float m; ........................... }
Pour les champ char, si jamais tu auras des espaces vaut fgets au lieu de scanf.
inventrice
Messages postés
8
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
14 juin 2008
12
14 juin 2008 à 12:28
14 juin 2008 à 12:28
Re ^^
j'ai fait ce que vous m'avez conseillé
mais on m'affiche 2 erreurs au niveau de fgets et j'ai encore un petit problème quand je fais entrer l'adresse
par exemple si je saisis pour l'adresse " sekilia rue11 n31" il considère juste sekilia comme adresse et rue11 comme age et n31 comme nom de l'autre personne!
bon, j'ai utilisé fgets comme ça:
j'ai fait ce que vous m'avez conseillé
mais on m'affiche 2 erreurs au niveau de fgets et j'ai encore un petit problème quand je fais entrer l'adresse
par exemple si je saisis pour l'adresse " sekilia rue11 n31" il considère juste sekilia comme adresse et rue11 comme age et n31 comme nom de l'autre personne!
bon, j'ai utilisé fgets comme ça:
fgets("%s",&t[i].adresse);
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
14 juin 2008 à 14:01
14 juin 2008 à 14:01
Essaie comme ça
#include<stdio.h> //#include<conio.h> typedef struct { char nom[50]; char prenom[50]; char adresse[100]; int age; }personne; main() { personne t[20]; int i,np,sat; float m; clrscr(); printf("entrez le nombre de personnes\n"); scanf("%d",&np); for(i=0;i<np;i++){ printf("entrez le nom de la personne\n"); scanf("%s",t[i].nom); printf("entrez le prenom de la personne\n"); scanf("%s",t[i].prenom); getchar(); printf("entrez l'adresse de la personne\n"); //scanf("%s",t[i].adresse); fgets(t[i].adresse,49,stdin); printf("entrez l'age de la personne\n"); scanf("%d",&t[i].age); } sat=0; for(i=0;i<np;i++) sat=sat+t[i].age; m=sat/np; for(i=0;i<np;i++){ printf("nom: %s\n",t[i].nom); printf("prenom: %s\n",t[i].prenom); printf("adresse: %s\n",t[i].adresse); printf("age: %d\n",t[i].age); } printf("la somme d'age totale est: %d\n", sat); printf("la moyenne d'age est: %.f\n",m); getchar(); return 0; }
inventrice
Messages postés
8
Date d'inscription
lundi 7 janvier 2008
Statut
Membre
Dernière intervention
14 juin 2008
12
14 juin 2008 à 16:21
14 juin 2008 à 16:21
merci lami20j c'est vraiment gentil ^^
le problème est résolu
le problème est résolu