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

 


Dernière réponse
Sujet : [C++] gcc il bogue :(
LetoII

legreg a écrit a écrit :

En théorie on ne flushe pas stdin,
ca n'a pas de sens pour le standard C.
 
apres on peut vouloir flusher pour avoir un comportement
non standard mais le comportement sur un flux quelconque
est non défini.
(stdin peut etre n'importe quoi, d'une entrée reseau, une redirection de la sortie d'un autre programme ou d'un fichier).
 
LeGreg




 
Il n'y a pas de comportement général défini, néamoin il y en a un lorsque l'entré standard est le clavier: ca vide le buffer d'entrée. De même lorsqu'on redirige un ficheir vers l'entrée standard chaque ligne étant interprété comme une entrée clavier le flush fait passer à la ligne suivante.


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
LetoII

legreg a écrit a écrit :

En théorie on ne flushe pas stdin,
ca n'a pas de sens pour le standard C.
 
apres on peut vouloir flusher pour avoir un comportement
non standard mais le comportement sur un flux quelconque
est non défini.
(stdin peut etre n'importe quoi, d'une entrée reseau, une redirection de la sortie d'un autre programme ou d'un fichier).
 
LeGreg




 
Il n'y a pas de comportement général défini, néamoin il y en a un lorsque l'entré standard est le clavier: ca vide le buffer d'entrée. De même lorsqu'on redirige un ficheir vers l'entrée standard chaque ligne étant interprété comme une entrée clavier le flush fait passer à la ligne suivante.

LeGreg En théorie on ne flushe pas stdin,
ca n'a pas de sens pour le standard C.
 
apres on peut vouloir flusher pour avoir un comportement
non standard mais le comportement sur un flux quelconque
est non défini.
(stdin peut etre n'importe quoi, d'une entrée reseau, une redirection de la sortie d'un autre programme ou d'un fichier).
 
LeGreg
LetoII

torpe23 a écrit a écrit :

fais un fflush(stdin) avant chacun de tes fgets() : c'est pour vider le tampon.




 
fais un fflush(stdin) après chacun de tes fgets()

Jar Jar

juju_le_barbare a écrit a écrit :

Merci m'sieur...
Il va me coûter combien m'sieur ?


http://www.fnac.com/img/Top/v_logo.gif

juju_le_barbare

gilou a écrit a écrit :

L'est traduit en francais depuis des lustres.
A+,




 
Merci m'sieur...
Il va me coûter combien m'sieur ?
 
@++ m'sieur !
 
juju

gilou L'est traduit en francais depuis des lustres.
A+,
juju_le_barbare

gilou a écrit a écrit :

 
Probablement ecrit dans le Kernighan & Ritchie...
A+,




 
ben je l'ai pas encore ... euh ...
c'est en english c'est ça ? ça douille combien ?
 
Merci

gilou

juju_le_barbare a écrit a écrit :

 
 
OK d'accord merci ;)
Mais c'est écrit nulle part ça comment j'aurais pu savoir ?




Probablement ecrit dans le Kernighan & Ritchie...
A+,

juju_le_barbare

DJ_Mulder a écrit a écrit :

C pas un bug de gcc ca (bien qu'il y en ai)
 
c normal que ton printf a la fin ne s'affiche que si ya un \n c dans le fonctionnement de printf (cf man 3 printf) car il bufferise le maximum de données avant de les affiché ( quand il y a u \n ou un fflush(stdout))
 
sinon pour ton autre pb il peut facilement ce resoudre en faisant un fflush(stdin) pour vider l'entré standard de toutes les saloperies qui peuvent trainer (du genre un \n...)




 
OK d'accord merci ;)
Mais c'est écrit nulle part ça comment j'aurais pu savoir ?

DJ_Mulder C pas un bug de gcc ca (bien qu'il y en ai)
 
c normal que ton printf a la fin ne s'affiche que si ya un \n c dans le fonctionnement de printf (cf man 3 printf) car il bufferise le maximum de données avant de les affiché ( quand il y a u \n ou un fflush(stdout))
 
sinon pour ton autre pb il peut facilement ce resoudre en faisant un fflush(stdin) pour vider l'entré standard de toutes les saloperies qui peuvent trainer (du genre un \n...)
juju_le_barbare

torpe23 a écrit a écrit :

fais un fflush(stdin) avant chacun de tes fgets() : c'est pour vider le tampon.




 
je vais essayer chef ! :hello:

torpe23 fais un fflush(stdin) avant chacun de tes fgets() : c'est pour vider le tampon.
juju_le_barbare Salut,
 
Dites donc gcc 2.96 et je pense qu'il a pas mal de bugs... Enfin je crois...
J'en ai cité un dans un post hier, et là j'ai presque le même, autre version !
Ici j'ai ma fonction main(), dedans je peux utiliser des printf() sans '\n' à la fin de la chaîne et ça marche impecc.
Seulement dans le prog ci-dessous :
 

Code :
  1. #include <stdio.h>
  2. void main()
  3. {
  4. char *choix = new char[1];
  5. printf("salut la compagnie" );
  6. printf("Voulez vous 'jouer' ? (1 pour oui)\n" );
  7. fgets(choix, 2, stdin);
  8. if (choix[0] == 49)
  9. {
  10. char *a = new char[15], *b = new char[5], *c = new char[5], *d = new char[4096];
  11. printf("Allez on affecte des valeurs :\nAlors il me faut la variable a (15 caractères) :\n" );
  12. fgets(a, 16, stdin);
  13. printf("Alors il me faut la variable b (5 caractères) :" );
  14. fgets(b, 6, stdin);
  15. printf("Alors il me faut la variable c (5 caractères) :\n" );
  16. fgets(c, 6, stdin);
  17. printf("Alors il me faut la variable d (4096 caractères) :\n" );
  18. fgets(d, 4096, stdin);
  19. }
  20. else
  21. printf("Tant pis ...\n" );
  22. }


 
1/ le 'Tant pis' ne s'affiche que si il y a '\n' à la fin, sinon il ne s'affiche pas. Ce bug n'affecte que les printf à la fin ou après le 'if' (ou switch pour mon ancien post),
donc le "salut la compagnie" s'affiche très bien sans son '\n'...
 
2/ Il affiche 'Alors il me faut la variable a (15 caractères) :\n' systématiquement, mais il ne me laisse pas saisir 'a', il affiche juste en dessous la suite, c'est-à-dire
'Alors il me faut la variable b (5 caractères) :', et je peux saisir 'b', ensuite 'c' et 'd' sans problème... mais pas 'a' !!!
 
Je voudrais savoir si il s'agit bien de bugs ou si c'est moi qui ai loupé quelque chose !
Vraiment il se passe des choses bizarres !


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)