Chronomètre

Fermé
napooo Messages postés 1 Date d'inscription mercredi 20 décembre 2017 Statut Membre Dernière intervention 20 décembre 2017 - Modifié le 21 déc. 2017 à 00:08
aure2015 Messages postés 93 Date d'inscription dimanche 11 janvier 2009 Statut Membre Dernière intervention 30 mai 2020 - 21 déc. 2017 à 22:05
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 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
21 déc. 2017 à 00:10
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 dimanche 11 janvier 2009 Statut Membre Dernière intervention 30 mai 2020 5
21 déc. 2017 à 22:05
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