Chronomètre

napooo Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
aure2015 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous, je commence tout juste en c et pour un petit projet je dois faire un chronomètre,
voilà le programme que j'ai fait, il ne me semble pas mauvais, il n'y a pas d'erreur de compilation, en revanche lors de l’exécution il ne se passe strictement rien !

#include <stdio.h>
#include <stdlib.h>
#include <time.h> //A ne pas oublier
#include <unistd.h> //Pour le sleep

int main (void)
{
 time_t debut, fin; //Les variables de temps sont de type time_t
 double difference;
 int clavier;
 

 debut = time(NULL); //On donne une valeur de temps à temps1.
 printf("Appuyez sur espace pour stopper le chronometre");
 do 
  {
   clavier=getchar();
  }
 while(clavier!=' ');
 sleep(1000); //On attend 1 secondes.
 fin = time(NULL); //On donne une valeur de temps à temps2.
 difference = difftime(fin, debut);
 printf(" il s'est ecoule %lf secondes", difftime(fin, debut));
 //On affiche la difference de temps entre temps 1 et temps2

 return EXIT_SUCCESS;
}


NB : Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
A voir également:

2 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Déjà.. tu dois déplacer les instructions (qui se trouvent en dessous... ) DANS la boucle Do While
Là... tu les exécutes en dehors de la boucle...
https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/14722-les-boucles


.
0
aure2015 Messages postés 93 Date d'inscription   Statut Membre Dernière intervention   5
 
Plusieurs fautes importantes:

- Comme l'a dit Jordane, tu dois mettre les instruction dans ta boucle!

- Ensuite la déclaration de ta variable clavier, ça doit être un char pas un int! Un int est un entier!

-Ton sleep(1000), ça veut dire que ton programme va se mettre en sleep pendant 1000secondes. Une fois que tu l'auras remis dans ta boucle, le mieux est de faire un sleep(1).

- Pour le temps écoulé, tu te compliques beaucoup trop la tâche, une simple variable int, que tu incrémentes à chaque passage dans la boucle serait beaucoup plus facile et efficace.

- De plus pourquoi refaire le calcule de la différence si tu as déjà stocké le résultat dans une variable? Affiche plutôt la variable!

-Dernier point le getchar(), le getchar lit ce que tu as dans ton buffer, du coup si ton buffer est vide, il va attendre que l'utilisateur encode quelque chose! Pas très pratique surtout que vu ton programme il est vide au premier tour de boucle!
Personnellement, j'ai pas vraiment de solution pour ça... Peut être qu'il y en a une mais je ne la connais pas! Maintenant, il y a moyen de créer un programme alternatif: Soit tu demandes le nombre de seconde à l'utilisateur avant d'entrer dans ta boucle, soit tu appuyes sur une autre touche à chaque tour de boucle...
0