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

  FORUM HardWare.fr
  Programmation

  [C++] gcc il bogue :(

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] gcc il bogue :(

n°169367
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 02-07-2002 à 00:31:45  profilanswer
 

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 !


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
mood
Publicité
Posté le 02-07-2002 à 00:31:45  profilanswer
 

n°169371
torpe23
Posté le 02-07-2002 à 00:38:18  profilanswer
 

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

n°169372
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 02-07-2002 à 00:39:18  profilanswer
 

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:


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°169373
DJ_Mulder
Posté le 02-07-2002 à 00:40:50  profilanswer
 

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...)

n°169374
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 02-07-2002 à 00:42:58  profilanswer
 

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 ?


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°169376
gilou
Modérateur
Modosaurus Rex
Posté le 02-07-2002 à 00:45:32  profilanswer
 

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+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°169377
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 02-07-2002 à 00:49:54  profilanswer
 

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


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°169396
gilou
Modérateur
Modosaurus Rex
Posté le 02-07-2002 à 03:19:37  profilanswer
 

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


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°169484
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 02-07-2002 à 10:07:25  profilanswer
 

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


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°169491
Jar Jar
Intaigriste
Posté le 02-07-2002 à 10:11:56  profilanswer
 

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


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
mood
Publicité
Posté le 02-07-2002 à 10:11:56  profilanswer
 

n°169539
LetoII
Le dormeur doit se réveiller
Posté le 02-07-2002 à 10:53:09  profilanswer
 

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()


---------------
Le Tyran
n°169748
LeGreg
Posté le 02-07-2002 à 13:17:54  profilanswer
 

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

n°169841
LetoII
Le dormeur doit se réveiller
Posté le 02-07-2002 à 14:46:55  profilanswer
 

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.


---------------
Le Tyran

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

  [C++] gcc il bogue :(

 

Sujets relatifs
Plus de sujets relatifs à : [C++] gcc il bogue :(


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