exo comprenant tableau et structure [Debutant] - C - Programmation
Marsh Posté le 03-08-2004 à 21:03:51
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.
Marsh Posté le 03-08-2004 à 21:21:03
Voila ce que ca donne maintenant :
Code :
|
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
Marsh Posté le 03-08-2004 à 22:35:28
c'est n'imp. insère un fflush(stdout); entre tes printf et scanf
Marsh Posté le 03-08-2004 à 23:22:44
je connais pas cette fonction ...
Marsh Posté le 04-08-2004 à 10:02:00
mais c'est quoi ce code enfin ?
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
Marsh Posté le 04-08-2004 à 18:06:27
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 :
|
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"
Marsh Posté le 04-08-2004 à 18:29:25
Sve@r a écrit : |
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> )
Marsh Posté le 04-08-2004 à 18:48:13
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 !!!
Marsh Posté le 04-08-2004 à 18:54:48
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
Marsh Posté le 04-08-2004 à 19:10:49
Je prends en compte le buffer "écran", et je mets à la poubelle le buffer "clavier". Ce ne sont pas les mêmes buffers !!!
Marsh Posté le 04-08-2004 à 19:17:48
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);
Marsh Posté le 04-08-2004 à 19:22:49
Je viens juste de rentrer, et j'ai de belles reponses.
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.
Marsh Posté le 04-08-2004 à 19:28:52
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 ?
Marsh Posté le 04-08-2004 à 19:34:11
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
Marsh Posté le 04-08-2004 à 19:37:48
t'as un "int main" mais tu renvoies rien... un petit return 0; a la fin serait de bon
Marsh Posté le 04-08-2004 à 19:38:24
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 ? sale n00b
Marsh Posté le 04-08-2004 à 19:45:37
BuBBleGuM a écrit : [...]
|
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.
Marsh Posté le 04-08-2004 à 19:45:50
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.
Marsh Posté le 04-08-2004 à 20:07:08
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...
Marsh Posté le 04-08-2004 à 20:16:57
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
Marsh Posté le 04-08-2004 à 20:56:17
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
Marsh Posté le 04-08-2004 à 21:22:52
ç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é
Marsh Posté le 03-08-2004 à 20:50:38
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 :
Donc comme vous pouvez le voir c'est pas fameux, meme horrible.
Donc si vous pouvez m'orienter
Message édité par bubblegum le 03-08-2004 à 20:51:46