Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1146 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [Debutant] exo comprenant tableau et structure

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Debutant] exo comprenant tableau et structure

n°814179
bubblegum
Posté le 03-08-2004 à 20:50:38  profilanswer
 

Bonjour,
 
Voila j'ai un exercice a faire. Celui consiste a mettre en ouevre, un programmen ou l on pourrais afficher et renseigner un carnet d adress.
Seul le nom, prenom, et numero telephonique est a renseigner.
La contrainte est d utiliser les tableaux ou les structure.
Si je viens poster, ici, c'est que nos supports de cours ne sont pas forcement tres complet. Et je suis venu ici lire pas mal de tuto, mais malgré cela, je trouve des difficulte a ecrire mon programme.
Voila ce que ca donne actuellement :
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. struct personne
  4. {
  5. char nom[20];
  6. char prenom[20];
  7. char tel[10];
  8. };
  9. int main()
  10. {
  11. printf("Combien de personne voulez-vous entrer dans la base : " );
  12. scanf("%d",&nombre_de_personne);
  13. }


 
Donc comme vous pouvez le voir c'est pas fameux, meme horrible.
Donc si vous pouvez m'orienter  :jap:


Message édité par bubblegum le 03-08-2004 à 20:51:46
mood
Publicité
Posté le 03-08-2004 à 20:50:38  profilanswer
 

n°814196
el muchach​o
Comfortably Numb
Posté le 03-08-2004 à 21:03:51  profilanswer
 

Il te reste à créer un tableau assez grand dont les éléments sont de type "personne": personne tab[100] par exemple.
 
Ensuite, tu crées une fonction qui va demander à l'utilisateur de renseigner les champs nom, prénom et tel d'une personne (en vérifiant la longuer et la validité des valeurs entrées, et tu vas coller cet élément nouvellement créé dans une case de ton tableau.
Enfin, tu crées une fonction qui va afficher successivement tous les éléments du tableau.
A toi de jouer maintenant.


Message édité par el muchacho le 03-08-2004 à 21:04:34

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°814212
bubblegum
Posté le 03-08-2004 à 21:21:03  profilanswer
 

Voila ce que ca donne maintenant :

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. struct personne
  5. {
  6.      char nom[20];
  7.      char prenom[20];
  8.      char num[10];
  9. };
  10.  
  11. int main()
  12. {
  13.     printf("Combien de personne voulez-vous entrer dans la base : " );
  14.      scanf("%d",&nombre_de_personne);
  15. }
  16. Char tab [100]
  17. printf("Entrer le nom de la personne :" );
  18. scanf("%s", nom);
  19. printf("Entrer le prenom de la personne :" );
  20. scanf("%s", nom);
  21. printf("Entrer le numero de telephone de la personne :" );
  22. scanf("%s", num);
  23. }


 
Parcontre de cette maniere, je sais aps comment vont s enregistrer les donnes ; si les variables sont bien incrementer dans le taleau.
Et je ne sais pas comment faire sortir les informations du tableau

n°814264
Taz
bisounours-codeur
Posté le 03-08-2004 à 22:35:28  profilanswer
 

c'est n'imp. insère un fflush(stdout); entre tes printf et scanf

n°814336
bubblegum
Posté le 03-08-2004 à 23:22:44  profilanswer
 

je connais pas cette fonction ...


Message édité par bubblegum le 03-08-2004 à 23:22:51
n°814504
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 04-08-2004 à 10:02:00  profilanswer
 

mais c'est quoi ce code enfin ? [:mlc]
je veux bien que tu débutes, mais y'a quand même des limites !
en vrac :
- aucune variable de type "personne" déclarée,
- variable "nombre_de_personnes" non déclarée,
- pas de controle de dépassement des buffers (nom, prenom, num),
- code en dehors du main,
- pas de fflush(stdout) après chaque printf,
- "Char" au lieu de "char",
- variable "nom" utilisée 2 fois,
- etc...
'serait bon de reprendre tes cours depuis le début :/


---------------
J'ai un string dans l'array (Paris Hilton)
n°815160
Sve@r
Posté le 04-08-2004 à 18:06:27  profilanswer
 

Pas de problème
 
Lorsque tu as créé ta structure "personne", tu as automatiquement créé un nouveau type (comme char, int, double, etc) qui se nomme "struct personne"
Tu peux donc maintenant te définir un tableau de par exemple 1000 éléments de ce type => struct personne annuaire[1000];
En décomposant cette ligne, tu as ici un tableau nommé "annuaire" comprenant 1000 éléments et chaque élément est de type "struct personne"
 
Ensuite, tu peux faire saisir le nombre d'éléments un peu comme tu avais fait et boucler pour remplir et/ou afficher
 
Ton programme pourrait donc être
 

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. struct personne
  4. {
  5. char nom[20];
  6. char prenom[20];
  7. char tel[10];
  8. };
  9. int main()
  10. {
  11. /* Je déclare les variables dont j'ai besoin */
  12. int nb, i;
  13. struct personne annuaire[1000];
  14. /* Je fais saisir mon nombre d'éléments */
  15. printf("Combien de personne voulez-vous entrer dans la base (pas plus de 1000 SVP): " );
  16. fflush(stdout);
  17. fflush(stdin);
  18. scanf("%d",&nb);
  19. /* Je fais saisir ma base */
  20. for (i=0; i < nb; i++)
  21. {
  22.  printf("Nom de la personne %d :", i + 1);
  23.  fflush(stdout);
  24.  fflush(stdin);
  25.  scanf("%s", annuaire[i].nom);
  26.  printf("Prénom de la personne %d :", i + 1);
  27.  fflush(stdout);
  28.  fflush(stdin);
  29.  scanf("%s", annuaire[i].prenom);
  30.  printf("Tel de la personne %d :", i + 1);
  31.  fflush(stdout);
  32.  fflush(stdin);
  33.  scanf("%s", annuaire[i].tel);
  34. }
  35. /* J'affiche ma base */
  36. for (i=0; i < nb; i++)
  37. {
  38.  printf("Nom de la personne %d: %s\n", i + 1, annuaire[i].nom);
  39.  printf("Prénom de la personne %d: %s\n", i + 1, annuaire[i].prenom);
  40.  printf("Tel de la personne %d: %s\n", i + 1, annuaire[i].tel);
  41. }
  42. }


 
Tu remarqueras que je boucle de 0 à "nb - 1" car, en C, un tableau commence à 0. Cependant, j'affiche le nombre "i + 1" pour avoir à l'écran un affichage "naturel"
 
Les "fflush" sont là pour vider les buffer lors d'une saisie.
1) Je vide le buffer écran (stdout) après mon "printf" comme cela, mon invite "entrez le machin..." s'affiche tout de suite. Sinon, elle ne s'affiche que lorsque le buffer est plein et tu as alors un décalage entre les questions et les réponses
2) Je vide le buffer clavier (stdin) avant chaque "scanf" comme cela, mon clavier est bien vide et je suis certain que la variable récupère bien ce que je tape et non un résidu d'une saisie précédente
 
Remarque: Il est assez usuel de faire commencer le nom de ses structures par la lettre "s_". Comme cela, on voit facilement qu'il s'agit d'une structure et on ne confond pas le nom de la structure avec le nom d'une variable => struct s_personne au lieu de "struct personne"
 
:hello:

n°815178
Taz
bisounours-codeur
Posté le 04-08-2004 à 18:29:25  profilanswer
 

Sve@r a écrit :


2) Je vide le buffer clavier (stdin) avant chaque "scanf" comme cela, mon clavier est bien vide et je suis certain que la variable récupère bien ce que je tape et non un résidu d'une saisie précédente

mais bordel soit cohérent avec toi même, un coup tu flush pour forcer l'affichage à l'écran (finalisation des écritures en attente), un coup tu flush pour tout effacer .... aller, dégage ces flush(<flux entrant> )

n°815191
Sve@r
Posté le 04-08-2004 à 18:48:13  profilanswer
 

1) je fflush l'écran pour avoir tous mes affichages illico
2) je fflush le clavier pour qu'il soit vide avant la saisie
Ce ne sont pas les mêmes buffers !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°815193
Taz
bisounours-codeur
Posté le 04-08-2004 à 18:54:48  profilanswer
 

tu vois, t'es pas cohérent. un coup tu veux être sur que le contenu du buffer est bien pris en compte, l'autre tu veux qu'ils soit foutu à la poubelle ...
 
 
fflush(<flux entrant> ) est un non-sens

mood
Publicité
Posté le 04-08-2004 à 18:54:48  profilanswer
 

n°815220
Sve@r
Posté le 04-08-2004 à 19:10:49  profilanswer
 

Je prends en compte le buffer "écran", et je mets à la poubelle le buffer "clavier". Ce ne sont pas les mêmes buffers !!!


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°815227
Taz
bisounours-codeur
Posté le 04-08-2004 à 19:17:48  profilanswer
 

déjà tu ne fais rien du tout avec le buffer de stdin. et dailleurs, c'est confirmé, tu ne sais pas ce qu'est un buffer. si tu veux rajouter des instruction qui ne font rien, tu peux truffer ton code de ((void)0); ça sera aussi efficace que fflush(stdin);

n°815232
bubblegum
Posté le 04-08-2004 à 19:22:49  profilanswer
 

Je viens juste de rentrer, et j'ai de belles reponses.
 :jap:  
 
Je vais etudié tout ca !
 
et pour revoir els cours, sa va etre dur, car comme dit plus haut, pas tor de support, je me debrouille plus avec google.

n°815233
Sve@r
Posté le 04-08-2004 à 19:28:52  profilanswer
 

Taz a écrit :

déjà tu ne sais pas ce qu'est un buffer.


Je te l'accorde, je ne sais pas tout. D'ailleurs, qui peut se vanter de tout connaître en prog à part toi du haut de tes 21 ans ?


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°815234
WhatDe
Posté le 04-08-2004 à 19:34:11  profilanswer
 

Sve@r a écrit :

Je te l'accorde, je ne sais pas tout. D'ailleurs, qui peut se vanter de tout connaître en prog à part toi du haut de tes 21 ans ?


Moi  :o

n°815236
Tamahome
⭐⭐⭐⭐⭐
Posté le 04-08-2004 à 19:37:48  profilanswer
 

t'as un "int main" mais tu renvoies rien... un petit return 0; a la fin serait de bon [:aloy]


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°815237
Tamahome
⭐⭐⭐⭐⭐
Posté le 04-08-2004 à 19:38:24  profilanswer
 

Sve@r a écrit :

Je te l'accorde, je ne sais pas tout. D'ailleurs, qui peut se vanter de tout connaître en prog à part toi du haut de tes 21 ans ?


 
21 ans ? [:forummp3] sale n00b


---------------
Hobby eien /人◕ ‿‿ ◕人\
n°815239
darkoli
Le Petit Dinosaure Bleu
Posté le 04-08-2004 à 19:45:37  profilanswer
 

BuBBleGuM a écrit :

[...]

Code :
  1. [...]
  2. struct personne
  3. {
  4. char nom[20];
  5. char prenom[20];
  6. char tel[10];
  7. };
  8. [...]


[...]

Est-ce que (par hasard) tu n'aurais pas oublié de tenir compte du fameux '\0' en fin de chaîne ?
 
Par exemple pour le numéro de téléphone tu as dû compter 10 chiffres. Dans ce cas il faut utiliser une chaîne de 10 + 1 caractères. Le dernier servant à indiquer la fin de la chaîne.


Message édité par darkoli le 04-08-2004 à 19:45:57

---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°815240
Taz
bisounours-codeur
Posté le 04-08-2004 à 19:45:50  profilanswer
 

Sve@r a écrit :

Je te l'accorde, je ne sais pas tout. D'ailleurs, qui peut se vanter de tout connaître en prog à part toi du haut de tes 21 ans ?

le problème ça n'est pas l'âge, c'est que tu m'expliques depuis une page ce que tu fais avec fflush() (que tu ne connaissais pas en début de topic) alors que tu ne sais même pas ce que fais fflush et sur quoi elle travaille. Si t'as des questions, pose les, mais arrête de raconter des bêtises.

n°815257
Sve@r
Posté le 04-08-2004 à 20:07:08  profilanswer
 

Le sujet initial était d'aider un débutant à programmer une saisie et affichage d'une structure. Evidemment, j'ai donné un exemple simple de code. je n'ai pas pris en compte si le nb dépassait 1000 et/ou si la saisie dépassait la zone de stockage...


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°815260
Taz
bisounours-codeur
Posté le 04-08-2004 à 20:16:57  profilanswer
 

le truc c'est que tu débutes autant que lui. ne jamais utiliser scanf+%s ou gets. utilise fgets. fflush(stdin) est un non-sens. vive malloc

n°815279
cris56
Posté le 04-08-2004 à 20:56:17  profilanswer
 

pourquoi tu dis pas tout  simplement que fflush( <input stream> ) n'a pas de comportement decris dans le standard
 
c'est pas seulement une ligne inutile, ca peux en plus planter sur certain systemes
 
par contre sous windows (vc++), il est important de remarquer que fflush à un comportement definie pour un input stream, mais ce n'est pas standard
 
http://msdn.microsoft.com/library/ [...] fflush.asp

n°815288
Taz
bisounours-codeur
Posté le 04-08-2004 à 21:22:52  profilanswer
 

ça a certainement un certain comportement quelque part, seulement cette façon de tout balancer, c'est complètement porc. il se passe quoi le jour ou tu appelles ton truc avec un  pipe, etc ... c'est cradingue, ça revient à dire 'saisissez autant que vous voulez, même si c'est valide, je jète tout, parce que je suis trop idiot pour manier plus d'une ligne à la fois'. quand je tombe sur un programme comme, je cherche meme pas. a.exe < random et vlan segfault. 'culé :o

n°815301
WhatDe
Posté le 04-08-2004 à 21:42:23  profilanswer
 

Taz au pouvoir !

n°815303
cris56
Posté le 04-08-2004 à 21:43:50  profilanswer
 

moi je suis ok avec ca

n°815464
Tamahome
⭐⭐⭐⭐⭐
Posté le 05-08-2004 à 08:21:22  profilanswer
 

WhatDe a écrit :

Taz au pouvoir !


 
 :lol:  :lol:  :lol:  :lol:  [:skylight]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [Debutant] exo comprenant tableau et structure

 

Sujets relatifs
ASP erreur création d'un tableauQuel bon livre PHP5 pour débutant?
[PHP] Accés dans un tableau d'objets...Transformer une requete SQL à 1 seule colonne en un tableau.
recupere des variables dans un .ini (debutant)Récupérer une ligne d'un tableau à 2 dimensions...
[Java][PHP][SQL] Debutant: Par quoi commencer??Masquer le contenu d'un tableau dynamique
que faire pr un champ devant contenir un tableau de données[HTML] Tableau trop large et espace non voulu sous son image [Résolu]
Plus de sujets relatifs à : [Debutant] exo comprenant tableau et structure


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR