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

  FORUM HardWare.fr
  Programmation
  C++

  carriage return '\r' : fonctionne une fois sur 50 ???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

carriage return '\r' : fonctionne une fois sur 50 ???

n°1872419
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 13-04-2009 à 09:03:09  profilanswer
 

J'ai un petit souci d'affichage dans une de mes fonctions, je ne comprends pas bien d'où ça vient.
 
 
A noter que cela foncitonne bien sous windows, ça merdouille depuis que je suis passé à Linux (je suis sous Ubuntu). Le bug que je décris se produit pour toutes les boucles de mon programme qui ont le même type d'affichage, en voici un exemple (dans une partie du programme qui est en C en fait) :
 

Code :
  1. void play_goia_tournament(Gameinfo *gameinfo, int nb_players) {
  2. int max_game = nb_players * 2;
  3. int game_nb;
  4. int winner;
  5. float score;
  6. printf("Starting tournament.\n" );
  7. for(game_nb = 0;game_nb<max_game;game_nb++) {
  8.  gnugo_clear_board(SIZEGOIA);
  9.  printf("\rPlaying game %d/%d",game_nb+1,max_game);
  10.  PickTwo(nb_players);
  11.  Play_Goia(gameinfo, &winner, &score);
  12.  Update_Score(winner, score);
  13. }
  14. Repro_mutate();
  15. Send_Receive_Players(nb_players);
  16. }


 
Le but est d'afficher "Playing game n/100" en mettant à jour n au fur et à mesure de l'avancement du tournoi. Le problème que je rencontre est que je vois n=51, n=102, n=151 et c'est tout. Visiblement, le tournoi se déroule correctement, le reste se passe bien.
 
Des idées/suggestions ?

mood
Publicité
Posté le 13-04-2009 à 09:03:09  profilanswer
 

n°1872421
Joel F
Real men use unique_ptr
Posté le 13-04-2009 à 09:14:25  profilanswer
 

c'ets pas juste le fait que l'affichage soit bufferisé et n'affiche qu'un certain nombre de valeurs ?

n°1872423
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 13-04-2009 à 09:16:48  profilanswer
 

Hmm peut-être oui, ce serait une question de configuration de ma console alors ? Une idée pour savoir où est-ce que ça se règle ?

n°1872458
Taz
bisounours-codeur
Posté le 13-04-2009 à 12:25:06  profilanswer
 

fflush(stdout)

n°1872459
Taz
bisounours-codeur
Posté le 13-04-2009 à 12:25:49  profilanswer
 

Joel F a écrit :

c'ets pas juste le fait que l'affichage soit bufferisé et n'affiche qu'un certain nombre de valeurs ?


Achete une télé 100Hz

n°1872462
Alter Ego
Posté le 13-04-2009 à 12:50:38  profilanswer
 

Et en remplaçant \r par \n ?

n°1872464
Elmoricq
Modérateur
Posté le 13-04-2009 à 13:06:14  profilanswer
 

Alter Ego a écrit :

Et en remplaçant \r par \n ?


Si j'ai bien compris ce qu'il veut faire, ce n'est pas le but recherché.
 
Comme l'a dit Taz : fflush(stdout) pour forcer le vidage du buffer.

n°1872466
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 13-04-2009 à 13:45:11  profilanswer
 

Ouep, vais tenter ça, sinon ya pas moyen de régler la taille du buffer de stdout dés le début ?

n°1872468
Taz
bisounours-codeur
Posté le 13-04-2009 à 13:46:49  profilanswer
 

hephaestos a écrit :

Ouep, vais tenter ça, sinon ya pas moyen de régler la taille du buffer de stdout dés le début ?


Si mais t'en ferais quoi ?  Tu vois bien que %d/%d ça n'a déjà pas une largeur fixe ...

n°1872469
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 13-04-2009 à 13:54:20  profilanswer
 

J'avais dans l'idée de le mettre à 1 pour qu'il affiche systématiquement ce que je mets dans stdout ?
 
Sinon je confirme que ça marche avec fflush :jap:

mood
Publicité
Posté le 13-04-2009 à 13:54:20  profilanswer
 

n°1872470
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 13-04-2009 à 13:57:19  profilanswer
 

Mais du coup je ne comprends pas trop pourquoi il affiche pas ce qu'il a dans son buffer systématiquement dans ce cas, alors que tous les autres cout et printf marchent dirrectement ?

n°1872471
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 13-04-2009 à 14:04:56  profilanswer
 

Ok j'ai trouvé, sous linux ya pas de fflush automatique à moins de mettre un \n dans la chaine de caractères.
 
Merci pour le coup de main ! :jap:

n°1872476
Taz
bisounours-codeur
Posté le 13-04-2009 à 16:27:14  profilanswer
 

hephaestos a écrit :

Ok j'ai trouvé, sous linux ya pas de fflush automatique à moins de mettre un \n dans la chaine de caractères.

 

Merci pour le coup de main ! :jap:


C'est pas sous linux ... par défaut ça bufferise par ligne sur un terminal ...


Message édité par Taz le 13-04-2009 à 16:27:31
n°1872498
hephaestos
Sanctis Recorda, Sanctis deus.
Posté le 13-04-2009 à 18:34:06  profilanswer
 

Ah ben je t'assure qu'avec visual studio, le même programme ne bufferise rien du tout. La seule chose qui a changé est le compilateur.

Message cité 1 fois
Message édité par hephaestos le 13-04-2009 à 18:34:27
n°1872521
Un Program​meur
Posté le 13-04-2009 à 19:50:16  profilanswer
 

* setvbuf() est standard et permet de choisir entre absence de bufferisation, bufferisation par ligne et complète.  Et pour Unix, un \r ne termine pas une ligne.
* en C++, il y a un flag unitbuf dans les IOStreams (c'est la difference entre clog et cerr)

n°1872528
Taz
bisounours-codeur
Posté le 13-04-2009 à 20:38:38  profilanswer
 

hephaestos a écrit :

Ah ben je t'assure qu'avec visual studio, le même programme ne bufferise rien du tout. La seule chose qui a changé est le compilateur.


C'est à dire tout. Mefie toi du mode debug, etc. En programmation, quand on veut quelque chose, on le code, on attend pas "que ça marche quand je clique".


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

  carriage return '\r' : fonctionne une fois sur 50 ???

 

Sujets relatifs
[Resolu]Firefox Fonction Javascript replace fonctionne pasmettre une requete dans une boucle qui fonctionne
Header ne fonctionne plusNoob inside, SELECT plusieurs dates en 1 fois
Arraylist: .Contains ne fonctionne pas ??Menu accordéon Spry ne fonctionne pas sous Firefox
[MySQL-PHP] Egalité sur 2 strings qui ne fonctionne pas [résolu]copy() ne fonctionne pas car safe_mode ON
[Access] Fonction "SOMME" dans un etat qui ne fonctionne pasas3 Ça ne fonctionne pas!
Plus de sujets relatifs à : carriage return '\r' : fonctionne une fois sur 50 ???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR