Bonjour à tous !:P
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 ?!:yaisse2:
Merci d'avance ;)
Version imprimable
Bonjour à tous !:P
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 ?!:yaisse2:
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...
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)Citation:
Envoyé par Electroniktor
Désolé je me suis mal expliqué et en plus je n'avais pas besoin de faire cela ! :aie: Je ne sais même pas ce qui m'est passé par la tête pour demander ca mais j'ai fait autrement ! :bug:
En fait c'était pour faire un chronomètre. Si cela interesse voiçi le code ;) :
Code:
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 :Citation:
Envoyé par Electroniktor
Code:
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 ! :king: (j'avais oublié de suuprimer les variables que j'utilisais dans mon ancien code :lol: )
Et encore désolé pour la question idiote ... :oops:
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...Citation:
Envoyé par Electroniktor
Oui j'en suis conscient (même si la marge d'erreure est acceptable pour un jeu) :lol:
Mais je vais essayé d'en faire un autre plus précis et plus fiable. :yaisse2: 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 ! :king: