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
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 mercredi 28 novembre 2007 Statut Membre Dernière intervention 2 avril 2015 99
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
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 lundi 7 janvier 2008 Statut Membre Dernière intervention 14 juin 2008 12
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 ^^
0
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 567
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
printf("entrez le nombre de personnes\n");
scanf("%d",&np); 

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 à 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 ^^
0
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 567
14 juin 2008 à 09:46
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 lundi 7 janvier 2008 Statut Membre Dernière intervention 14 juin 2008 12
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:
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
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;
}
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
merci lami20j c'est vraiment gentil ^^
le problème est résolu
0