carriage return '\r' : fonctionne une fois sur 50 ??? - C++ - Programmation
Marsh Posté le 13-04-2009 à 09:14:25
c'ets pas juste le fait que l'affichage soit bufferisé et n'affiche qu'un certain nombre de valeurs ?
Marsh Posté le 13-04-2009 à 09:16:48
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 ?
Marsh Posté le 13-04-2009 à 12:25:49
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
Marsh Posté le 13-04-2009 à 13:06:14
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.
Marsh Posté le 13-04-2009 à 13:45:11
Ouep, vais tenter ça, sinon ya pas moyen de régler la taille du buffer de stdout dés le début ?
Marsh Posté le 13-04-2009 à 13:46:49
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 ...
Marsh Posté le 13-04-2009 à 13:54:20
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
Marsh Posté le 13-04-2009 à 13:57:19
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 ?
Marsh Posté le 13-04-2009 à 14:04:56
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 !
Marsh Posté le 13-04-2009 à 16:27:14
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 ! |
C'est pas sous linux ... par défaut ça bufferise par ligne sur un terminal ...
Marsh Posté le 13-04-2009 à 18:34:06
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.
Marsh Posté le 13-04-2009 à 19:50:16
* 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)
Marsh Posté le 13-04-2009 à 20:38:38
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".
Marsh Posté le 13-04-2009 à 09:03:09
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) :
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 ?