Chronomètre en C et précision

Résolu
Bonjour,

J'ai codé un chronomètre en C en utilisant la bibliothèque time.h, malgré l'utilisation de variable type float, la fonction ne me retourne que des valeurs type partie-entière.000000 secondes.
j'aimerais savoir s'il est possible que la fonction retourne des durées précises au delà de la virgule et non arrondies à la seconde la plus proche ?

Voici mon code :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
time_t debut, fin ;
double difference ;
int touche ;

debut=time(NULL) ;

printf("Appuyez sur espace pour stopper le chronometre") ;

do
{
touche=getch() ;
} while(touche!=' ') ;

fin=time(NULL) ;
difference = difftime(fin, debut) ;
printf("\n\nIl s'est ecoule %lf secondes", difference) ;

return 0;
}

Merci.

6 réponses

  1. ahhh j'ai compris !

    la fonction time() retourne des secondes ! Elle ne peut donc que renvoyer un nombre précis de secondes, mais pas de morceaux de secondes. La différence est donc arrondie, à cause de la fonction time() elle-même.

    si tu veux faire un chronomètre il faut utiliser la fonction clock() ! http://www.cplusplus.com/reference/ctime/clock/
    6
    1. Effectivement après avoir retesté ca marche !
      Merci !
      0
      1. Je viens d'essayer, ca ne marche pas, la précision est encore à 6 chiffres après la virgule...
        0
        1. ben pourtant si... je viens d'essayer en faisant un copié collé de ton code.

          T'es sûr que t'as recompilé après changement ?
          0
      2. C'est bon c'est exactement ce que je voulais, juste y a t'il possible d'afficher un chiffre avec une précision de 3 chiffres après la virgule au lieu de 6 ?

        Voici mon code :

        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>

        int main()
        {
        clock_t debut, fin ;
        long clk_tck = CLOCKS_PER_SEC ;
        double difference ;
        int touche, escape ;

        debut=clock() ;
        printf("Appuyez sur espace pour stopper le chronometre") ;

        do
        {
        do
        {
        touche=getch() ;
        } while(touche!=' ') ;

        system("cls") ;

        fin=clock() ;
        difference = (double)(fin-debut)/(double)clk_tck ;

        printf("\n\nIl s'est ecoule %lf secondes\n\n", difference) ;
        escape=getch() ;
        } while(escape!=27) ;

        return 0;
        }

        Merci
        0
        1. oui en utilisant : %.3f au lieu de ton %lf .
          0
        2. @PacorabanixJe viens d'essayer, ca ne marche pas, la précision est encore à 6 chiffres après la virgule..
          0