Affichage "chronomètre"

Résolu
Chachou_2032 Messages postés 1 Date d'inscription dimanche 27 septembre 2020 Statut Membre Dernière intervention 27 septembre 2020 - 27 sept. 2020 à 15:47
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 - 30 sept. 2020 à 18:23
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

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
Modifié le 27 sept. 2020 à 23:02
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
1
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
30 sept. 2020 à 18:23
C'est surement possible,pour cela un moteur de recherche avec les mots clés:
MSDN getchar >>>> donnera même un exemple de code.


--
1
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
28 sept. 2020 à 10:19
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.
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
29 sept. 2020 à 10:31
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Chachou_2032
30 sept. 2020 à 18:13
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; ?
0
Rejoignez-nous