Journal : C - raffraichir l'écran ?

Posté par mansuetus (page perso, ) le 16 mars 2004
0
bah, j'ai un prog avec des foncitons assez énormes, qui prennent *bien* du temps, et quand je leur dis d'afficher un truc, ils n'affichent que ...
à la fin !

par exemple
while ( ! compare_tableaux( actual_num_rows ) ) {
compteur++;
sauvegarde_tableaux ( actual_num_rows );

cycle_de_vie();
if (compteur % 100 == 0 )
printf ("\rcompteur : %d", compteur);
}

printf ("\rtaille : %d ", actual_num_rows);
printf ("compteur : %d -|- rang : %d\n ", compteur, compare_tableaux( actual_num_rows ));

et bien l'affichage ressemble à
etape 1:
(rien)
étape deux :
compteur : 5217

étape 3 :
taille : (...) ........................

et il a pas affiché d'intermédiaire !

Cher journal, comment on peut dire : "mets l' écran à jour" en C ( un redraw(); ou truc comme ça ? )

question subsidiaire ?
ou puis trouver ce genre d'infos (pas dans mon bouquin ; pas vu sur google)

> Lire le journal (12 commentaires, moyenne: 1,7).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Re: C - raffraichir l'écran ?

Posté par gawal () le 16/03/2004 à 07:47. (lien). Évalué à 5.

L'affichage est mis à jour dés que tu mets un retour chariot (\n). Sinon un fflush(stdout); devrait faire l'affaire.

Re: C - raffraichir l'écran ?

Posté par Dimitri Robert (page perso, ) le 16/03/2004 à 07:48. (lien). Évalué à 6.

fflush(stdout)

Ça permet de vider un flux.
Un petit lien vers une page de man en ligne : http://man.he.net/man3/fflush(...)

Re: C - raffraichir l'écran ?

Posté par Ph Husson (Jabber id, page perso, ) le 16/03/2004 à 07:48. (lien). Évalué à 0.

je dirais:
fflush(1);
pour stdout ou fflush(2) si c'est stderr etc

--
Ce messages est crypté par le système 42-rot13 pour plus de sécurité.
  • [^]Re: C - raffraichir l'écran ?

    Posté par Jonathan ILIAS-PILLET (Jabber id, page perso, ) le 16/03/2004 à 08:37. (lien). Évalué à 2.

    truc.c

    #include <stdio.h>

    int main (void)
    {
    if (stdout == 1)
    printf ("Changer de compilateur pour un compatible C ANSI\n");

    return 0;
    }


    # gcc -o truc -Wall -pendatic -ansi truc.c && ./truc

    ;p

    • [^]Re: C - raffraichir l'écran ?

      Posté par Cédric Chevalier (page perso, ) le 16/03/2004 à 10:50. (lien). Évalué à 1.

      J'ajouterai meme qu'un fflush(stderr) à mon avis c'est un peu inutile ;-).

  • [^]Re: C - raffraichir l'écran ?

    Posté par fred point (page perso, ) le 16/03/2004 à 11:18. (lien). Évalué à 1.

    y'a pas de bufferisation sur stderr !

    • [^]Re: C - raffraichir l'écran ?

      Posté par Ph Husson (Jabber id, page perso, ) le 16/03/2004 à 11:39. (lien). Évalué à 1.

      sur linux ou sur tous les systemes compatibles posix?

      --
      Ce messages est crypté par le système 42-rot13 pour plus de sécurité.
      • [^]Re: C - raffraichir l'écran ?

        Posté par fred point (page perso, ) le 17/03/2004 à 10:06. (lien). Évalué à 1.

        Je pense sur tout les système UNIX, ça avait l'air d'être une vérité pour mon prof système qui n'utilisait pas seulement linux.

  • [^]Re: C - raffraichir l'écran ?

    Posté par mansuetus (page perso, ) le 16/03/2004 à 18:11. (lien). Évalué à 1.

    avec fflush(1);
    attention : passage de l'argument n°1 de « fflush » transforme un entier en pointeur sans transtypage.

    (...)
    segfault ( au premier appel de la fonction)


    par contre, ça marche avec fflush(stdout);

    merci !!!!

    --
    mansuetus @ spontex . org

[+] Re: C - raffraichir l'écran ?

Posté par Ph Husson (Jabber id, page perso, ) le 16/03/2004 à 07:53. (lien). Évalué à -1.

3 fois la meme reponse a 2 minutes d'intervale ;)
c'est pas beau?

--
Ce messages est crypté par le système 42-rot13 pour plus de sécurité.

Re: C - raffraichir l'écran ?

Posté par zelyph () le 16/03/2004 à 10:29. (lien). Évalué à 1.

Alala les véritables utilisent "write":

char *pat = "\rmon resultat: %d";
char *buf = (char *)malloc(strlen(pat)+30);

sprintf(buf,pat,value);
write(1,buf,strlen(buf));

free(buf);

/* non testé :p */

Re: C - raffraichir l'écran ?

Posté par Alexis B. () le 16/03/2004 à 11:21. (lien). Évalué à 2.

Autre solution: désactiver le buffer de sortie (ce qui fait
que la ligne n'est affichée qu'après un '\n').

#include <stdio.h>

/* ... */

setbuf(stdout, NULL);

^
|--- au début du programme.




-- Alexis ;->

Revenir en haut de page