Affichage "chronomètre" [Résolu]

Signaler
Messages postés
1
Date d'inscription
dimanche 27 septembre 2020
Statut
Membre
Dernière intervention
27 septembre 2020
-
Messages postés
557
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
30 septembre 2020
-
Bonjour,

J'aurais aimé savoir comment on peut insérer un printf (ou peut être une autre fonction du coup) dans une boucle pour que seules les variables changent. Je ne veux pas que ce qu'il y a dans le printf se répète. Seulement que les nouvelles valeurs écrasent les anciennes.
Voici mon code (Etant entièrement débutante en C, je m'excuse s'il pique les yeux ! ) :
  int h=0;
  int m=0;
  int s=0;
  for (int i=0;i<86400;i++)
  {
    printf("Vous etes ici depuis %d:%d:%d.", h,m,s);

      if (s<60)
      {
       sleep(1);
       s=s+1;
      }
      else
      {
        s=0;
        m=m+1;
      }
      if (m==60)
      {
       m=0;
       h=h+1;
      }
  }

5 réponses

Messages postés
14855
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
11 octobre 2020
444
Bonsoir
peut-être en effaçant l'écran avant d'afficher ta nouvelle ligne?

https://lite.qwant.com/?q=c+console+clear+screen&t=web
Quand j'étais petit, la mer Morte n'était que malade.
George Burns
Messages postés
557
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
30 septembre 2020
2
C'est surement possible,pour cela un moteur de recherche avec les mots clés:
MSDN getchar >>>> donnera même un exemple de code.


--
Messages postés
3819
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
28 septembre 2020
113
Bonjour !

Tu ne peux pas, tout simplement ! La console est un outil qui permet d'afficher des informations, ligne par ligne, à la suite. Dès le moment où tu ne veux plus ce comportement de base, il te faut utiliser un autre système.

Je m'explique: tu as ton terminal, et il a un fonctionnement par défaut, qui est celui que je t'ai décris. Si ce comportement par défaut ne convient pas, alors il faut utiliser un terminal en mode "raw" (sans comportement) et réécrire manuellement ce comportement ! On peut faire cela via "termios" par exemple. Je ne te cache pas que c'est assez compliqué (voire très difficile). Si tu débutes, ça ne sert à rien de te lancer là-dedans.
Il existe aussi des bibliothèques de comportement déjà faites pour cela, comme "ncurses" (tout aussi difficile à prendre en main pour qui débute).

C'est une erreur classique que d'essayer de "tordre" le comportement du terminal. Accepte que c'est comme cela que ça fonctionne et tu gagneras du temps :).

Au pire, tu peux effacer l'écran (en vrai, "effacer un écran" équivaut à sauter autant de lignes que la taille du terminal), pour donner l'illusion, mais ça reste de la bidouille.
Messages postés
557
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
30 septembre 2020
2
Solution simple ,terminé la ligne par \r

printf("Vous etes ici depuis %d:%d:%d.\r", h,m,s);

Le curseur revient en début de ligne et on peut re-imprimer sur le texte précédent.

Merci ! Et est-il possible d'arrêter ce chrono lorsque l'utilisateur appuie sur la touche entrée.
Avec quelque chose du genre
if (getchar!=13) return 0; ?