Bonjour à tous !![]()
J'aimerais savoir si il existe une fonction qui surveille l'état d'une variable (sa valeure) au même titre que if (kbhit ()) qui surveille le clavier ?!![]()
Merci d'avance![]()
Bonjour à tous !![]()
J'aimerais savoir si il existe une fonction qui surveille l'état d'une variable (sa valeure) au même titre que if (kbhit ()) qui surveille le clavier ?!![]()
Merci d'avance![]()
Qu'appelles-tu surveiller ?
kbhit() ne surveille rien du tout, c'est juste une fonction qui dit de manière non-bloquante s'il y a quelque chose dans le buffer clavier...
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Si tu comptes connaîtres l'état d'une variable (j'entends ici état=valeur) à un instant donné, le mieux (et le plus simple) reste de tracer sa valeur (avec des fprintf si t'es en mode console)Envoyé par Electroniktor
Désolé je me suis mal expliqué et en plus je n'avais pas besoin de faire cela !Je ne sais même pas ce qui m'est passé par la tête pour demander ca mais j'ai fait autrement !
![]()
En fait c'était pour faire un chronomètre. Si cela interesse voiçi le code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 #include <stdio.h> #include <windows.h> #include <conio2.h> int entete () { printf("\t\t\t\t+-----------+\n"); printf("\t\t\t\t| CHRONOS |\n"); printf("\t\t\t\t+-----------+\n\n\n\n"); printf("Bonjour et bienvenue dans Chronos, votre desormais precieux chronometre.\n\n"); printf("Veuillez appuyer sur : * d pour (re)demarrer le chronometre.\n"); printf(" * r pour reinitialiser le chronometre.\n"); printf(" * p pour mettre en pause le chronometre.\n"); printf(" * echap pour quitter Chronos."); gotoxy( 35, 17); printf("+--------+"); // affichage gotoxy( 35, 18); printf("| 00.0 |"); // du gotoxy( 35, 19); printf("+--------+"); // chronomètre } int main() { double depart = 0; // declaration double fin = 0; double duree = 0; double temps = 0; // des long x = 38; long toucheAppuyee = '0'; long etat = 0; // variables entete(); // affichege de l'entete // boucle du chronomètre do { // on surveille le clavier if (kbhit ()) { toucheAppuyee = getch(); switch (toucheAppuyee) { case 'r': // si on appuie sur r temps = 0; gotoxy( 35, 18); printf("| 00.0 |"); // on reinitialise etat = 2; break; case 27: break; case 'p': // si on appuie sur p etat = 0;// on met en pause break; case 'd': // si on appuie sur d etat = 1; // on démarre le chrono break; } } if (etat == 1) // si on choisi de demarrer le chrono { // on règle l'afichege suivant la duree if (temps < 99) { x = 39; } if (temps > 99) { x = 38; } // on chronomètre gotoxy( x, 18); printf("%.1lf", temps/10); // on affiche le temps gotoxy( 42, 18); putch(' '); temps++; sleep(99); } } while (toucheAppuyee != 27); // fin si on appuie sur echap return 0; }
Attention à ne pas mélanger les sorties standards et les sorties directes. Diverses simplifications :Envoyé par Electroniktor
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 #include <stdio.h> #include <windows.h> #include <conio2.h> #define msleep(ms) Sleep (ms) static void aff_chrono (int temps) { gotoxy (38, 18), cprintf ("%5.1f", temps / 10.0); // on affiche le temps } static void entete (void) { gotoxy (34, 1), cputs ("+-----------+"); gotoxy (34, 2), cputs ("| CHRONOS |"); gotoxy (34, 3), cputs ("+-----------+"); gotoxy (3, 8), cputs ("Bonjour et bienvenue dans Chronos, votre desormais precieux chronometre.\n\n"); gotoxy (3, 9), cputs ("Veuillez appuyer sur : * d pour (re)demarrer le chronometre.\n"); gotoxy (3, 10), cputs (" * r pour reinitialiser le chronometre.\n"); gotoxy (3, 11), cputs (" * p pour mettre en pause le chronometre.\n"); gotoxy (3, 12), cputs (" * echap pour quitter Chronos."); gotoxy (35, 17), cprintf ("+--------+"); gotoxy (35, 18), cprintf ("| |"); gotoxy (35, 19), cprintf ("+--------+"); } int main (void) { int toucheAppuyee = '0'; int etat = 0; double temps = 0; entete (); aff_chrono (temps); // boucle du chronomètre do { // on surveille le clavier if (kbhit ()) { toucheAppuyee = getch (); switch (toucheAppuyee) { case 'r': temps = 0; aff_chrono (temps); etat = 2; break; case 'p': etat = 0; // on met en pause break; case 'd': // si on appuie sur d etat = 1; // on démarre le chrono break; } } if (etat == 1) // si on choisi de demarrer le chrono { // on chronomètre aff_chrono (temps); temps++; msleep (99); } } while (toucheAppuyee != 27); // fin si on appuie sur echap return 0; }
Merci beaucoup pour les simplifications !(j'avais oublié de suuprimer les variables que j'utilisais dans mon ancien code
)
Et encore désolé pour la question idiote ...![]()
Au fait, tu es bien conscient que ça n'a rien d'un chronomètre 'officiel'. Un Sleep() suspend pendant 'au moins' le temps indiqué. Ca peut être plus, beaucoup plus, selon la charge des autres processus...Envoyé par Electroniktor
Oui j'en suis conscient (même si la marge d'erreure est acceptable pour un jeu)![]()
Mais je vais essayé d'en faire un autre plus précis et plus fiable.Mais pour cela il faudrait que je trouve comment extraire l'heure courante au format : h/min/sec/millisec ! Et ensuite je soustrais à cette date une date de départ !
![]()
Partager