Problème d'enregistrements dans le langage C
Résolu
inventrice
Messages postés
8
Date d'inscription
Statut
Membre
Dernière intervention
-
inventrice Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
inventrice Messages postés 8 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
voici l'exercice:
une personne est connue par son nom, son prenom, son adresse et son age.
écrire un programme C qui permet :
- d'entrer NP de personne
- de calculer la somme d'age totale SAT et la moyenne d'age par personne M
- et enfin d'afficher les données dans l'écran
voici ce que j'ai fait:
#include<stdio.h>
#include<conio.h>
typedef struct
{
char nom;
char prenom;
char adresse;
int age;
}personne;
personne t[20];
int i,np,sat;
float m;
main()
{
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);
printf("entrez l'adresse de la personne\n");
scanf("%s",&t[i].adresse);
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",m);
getch();
return (0);
}
mais apparamment j'ai un problème dans le stokage des données, c'est-à-dire qu'il y a un problème dans le tableau mais je ne sais pas comment le résoudre
j'attend impatiemment vos réponses
et je vous remercie d'avance
voici l'exercice:
une personne est connue par son nom, son prenom, son adresse et son age.
écrire un programme C qui permet :
- d'entrer NP de personne
- de calculer la somme d'age totale SAT et la moyenne d'age par personne M
- et enfin d'afficher les données dans l'écran
voici ce que j'ai fait:
#include<stdio.h>
#include<conio.h>
typedef struct
{
char nom;
char prenom;
char adresse;
int age;
}personne;
personne t[20];
int i,np,sat;
float m;
main()
{
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);
printf("entrez l'adresse de la personne\n");
scanf("%s",&t[i].adresse);
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",m);
getch();
return (0);
}
mais apparamment j'ai un problème dans le stokage des données, c'est-à-dire qu'il y a un problème dans le tableau mais je ne sais pas comment le résoudre
j'attend impatiemment vos réponses
et je vous remercie d'avance
A voir également:
- Problème d'enregistrements dans le langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Comment enregistrer un mail dans mes documents - Guide
- Enregistrer le son du pc - Guide
5 réponses
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.
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 ^^
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);
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.
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
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; }