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   -
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
A voir également:

5 réponses

doctormad Messages postés 430 Date d'inscription   Statut Membre Dernière intervention   99
 
Salut,

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.
1
inventrice Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   12
 
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 ^^
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
printf("entrez le nombre de personnes\n");
scanf("%d",&np); 

0
inventrice Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   12
 
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 ^^
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

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.
0
inventrice Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   12
 
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:
fgets("%s",&t[i].adresse);
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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;
}
0
inventrice Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   12
 
merci lami20j c'est vraiment gentil ^^
le problème est résolu
0