comprend pô! - C++ - Programmation
Marsh Posté le 17-03-2003 à 13:22:45
Salut !
Commences déjà par allouer ta mémoire correctement, c'est à dire une seule fois, par un
Code :
|
avant de rentrer dans la boucle. Bien sûr, il faut désallouer à la fin avec des "free".
Ensuite avec l'utilisation des flux il faut faire gaffe que le flux soit bien vide avant de tenter quoique ce soit... essayes d'utiliser "fflush(stdin)".
Enfin, je n'ai pas l'impression que ton algo de gestion des choix du clavier soit pertinent. Ca m'a l'air un peu compliqué, tous ces do/while. Tu veux faire quoi, exactement ?
Marsh Posté le 17-03-2003 à 13:28:19
le fflush(stdin) n'a aucun effet
ton rpoblèem, c'est que getchar() lit ds caractères au calvier, y compris '\n' qui est la touche entrée. alros soit tu ignore ce cas, soit tu résout ça en remplacant par un scanf("%c", &c)
quand a ta boucle, le cas générique, c'est de l'arretez quand quand getcahr() renvoie EOF
sinon, bien pour le EXIT_SUCCESS, bien que ça ne soit pas si victorieux que ça puisque tu ne free pas tes pointeurs
il manque un petit #include <stdio.h>
Marsh Posté le 17-03-2003 à 18:46:22
bien vu!!
j'ai utilisé fflush(stdin); et ça marche!
(j'ai compris le truc du \n et ça m'a l'aire d'être la cause mais aparement scanf("%c", &c) pose le même prob par contre si j'utilise scanf("%s", c); que j'initialise char *c=malloc(2); que je remplace tout les c par c[0] : ça marche (ce ki est asez logique après coup puisque mon string sera constitué d'un char et de \n)
Merci!
Marsh Posté le 17-03-2003 à 19:07:42
Peak a écrit : bien vu!! |
n'importe quoi.... fais une petit recherche sur le forum je t'en supplie
Marsh Posté le 17-03-2003 à 19:10:33
++Taz a écrit : n'importe quoi.... fais une petit recherche sur le forum je t'en supplie |
J'ai un peu la flemme de faire la recherche, mais quand le teminal est en mode ligne, ça te flush pas le début de la ligne ?
En mode caractère, c'est sûr que ça doit pas trop changer.
Marsh Posté le 17-03-2003 à 19:27:29
le comportement de fflush sur des flux entrants est absolument indéfini et ne fais absolument rien sur la plupart des systemes: et si ca fonctionne sur votre systeme, soyez sure que ça ne fonctionnera pas ailleurs. c'est le plus gros mythe qui existe en C. pour vider un flux, il faut lire à coup de fgetc .|
Marsh Posté le 17-03-2003 à 19:35:08
++Taz a écrit : le comportement de fflush sur des flux entrants est absolument indéfini et ne fais absolument rien sur la plupart des systemes: et si ca fonctionne sur votre systeme, soyez sure que ça ne fonctionnera pas ailleurs. c'est le plus gros mythe qui existe en C. pour vider un flux, il faut lire à coup de fgetc .| |
Merci.
Excellent, et nommer la fonction outfflush ou un truc un peu documentaire du genre ça leur serait pas venu à l'idée ?¿?
Marsh Posté le 17-03-2003 à 19:40:15
non. le fait est que fflush,ça n'a pas de sens sur un flux d'entrée. quand on dit fluser unf lux, on veut dire, finaliser les operations d'ecriturs bufferisés pour assurer la cohérence avec son disuqe dur par exemple. donc onv eut pas dire: coup de baguette magique, fais disparaitre le contenu du buffer. pourtant c'est ce qu'attende les gens quand ils font ça
Marsh Posté le 18-03-2003 à 09:15:02
Au temps pour moi, j'avais toujours cru sur parole les gens qui me disaient "met un fflush et ça videra le buffer". Je vérifierais mes sources la prochaine fois.
Marsh Posté le 17-03-2003 à 13:04:57
pff
quelqu'un pourrai il m'expliquer comment est il possible que ceci reagisse comme cela!?
Si j'entre 2 au clavier deja y me propose 2fois : "n8) retourner au Menu Principal" alors que d'après moi il n'y a vraiment aucun raison; y me laisse entré mon choise qu' a la deuxième passe???
si j'entre 8 y me reaffiche deux fois le menu de base. Idem : comprend vraiment pas pk!!!??