Probleme fgets - C - Programmation
Marsh Posté le 10-12-2004 à 00:58:31
traduit en C sans se prendre le choux ton code se traduit par :
Code :
|
Bon ok je triche en utilisant getline qui est GNU mais quand meme tu n'as pas un peu l'impression de te compliquer la vie avec scanf (qui est une verrue), fflush (??) etc...
Marsh Posté le 10-12-2004 à 01:03:57
Oui mais en fait j'ai absolument besoin de garder des fonctions en dehors de main().
Bon je vais essayer de changer ma ligne scanf.
Pour le fflush j'etais vraiment désespéée alors j'essyais un peu tout
Marsh Posté le 10-12-2004 à 01:09:06
en fait, c'est simple : quand tu lis en entier avec scanf. Toi tu tappes "69\n" et scanf ne lis que le '6' et le '9'. Donc il reste des choses dans ton buffer de lecture.
Donc deux solutions simples:
- soit tu vides ce buffer jusqu'à l' '\n' -> http://www.isty-info.uvsq.fr/~rume [...] 4.html#q_5
- soit tu fais comme manatane, mais pas la peine d'utiliser getline. Tu lis une ligne avec fgets, et après tu l'analyse avec sscanf (même fonctionnement que scanf, sauf que le premier argument est la chaine contenant les données.
Marsh Posté le 10-12-2004 à 01:12:41
ALors la merci beaucoup, je vais essayer tout de suite..
C'est quand même pas evident le C
Marsh Posté le 10-12-2004 à 08:52:17
myeve a écrit : Bonjour, j'ai un probleme d'affichage avec fgets. J'essaie de recuperer une chaine de caracteres sur la sortie standard: |
Déjà, ça, ça n'aide pas (je suppose qu'il s'agit d'un oubli).
|
Pour le reste, tu as écris une fonction get_line() qui est intéressante (je crois en reconnaître l'origine...héhé...), mais incomplète. En effet, elle ne traite pas le cas où la saisie est plus longue que la chaine. Dans ce cas, un '\n' traine dans stdin.
D'autre part, tu utilises scanf() qui systématiquement laisse trainer un '\n' dans stdin. (fonction d'usage difficile peu recommandée)
http://mapage.noos.fr/emdel/notes.htm#saisie
ton utilisation de malloc() est compliquée :
http://mapage.noos.fr/emdel/notes.htm#malloc
et pas forcément justifiée ici (mais je suppose que c'est un exercice, au fait TAILLE n'est pas définie). De plus, il manque l'essentiel, à savoir le test de la valeur retournée par malloc() avant son utilisation.
sizeof(char) vaut 1 par définition.
Il est inutile de mettre fflush(stdout) si le texte envoyé à stdout est une ligne complète.
http://mapage.noos.fr/emdel/notes.htm#fflush_stdout
Voici ton code mis au point. Pose des questions si tu ne comprends pas.
Code :
|
Marsh Posté le 10-12-2004 à 09:53:42
Emmanuel Delahaye a écrit : Déjà, ça, ça n'aide pas (je suppose qu'il s'agit d'un oubli). |
tu te souviens de ce que je t'ai dit à propos des devoirs
Marsh Posté le 10-12-2004 à 12:12:23
Taz a écrit : tu te souviens de ce que je t'ai dit à propos des devoirs |
Oui, mais la bonne volonté du questionneur est évidente. C'est pas comme quand il poste 0 ligne de code en demandant de tout faire... Mais bon, si ce forum est strict à ce point, je vais me conformer... C'est frustrant...
Marsh Posté le 10-12-2004 à 14:34:35
ce qu'il faut que tu vois bien, c'est que y a une fonction recherche sur le forum : y a des tas de topics remplis de bonnes choses. Et pour getline, la question est là toutes les semaines. Donc on essaie aussi de diminuer le rapport signal/bruit pour pas avoir 36 sujets sur la même chose. Les devoirs, attend un peu la rentrée de janvier : faut être ferme, sinon y a de l'abus
Marsh Posté le 10-12-2004 à 00:28:47
Bonjour, j'ai un probleme d'affichage avec fgets. J'essaie de recuperer une chaine de caracteres sur la sortie standard:
Si dans ma fonction main(), je ne mets pas les 3 lignes printf,fflush et scanf avant l'appel de mafonction(), TOUT SE PASSE BIEN!
Dans le cas contraire, il passe directement toute la fonction sans me laisser ecrire, ce qui donne sur la sortie standard :
"Entrez une chaine de caracteres :result="
De quoi cela vient il ?
Merci d'avance pour vos reponses..