Chronomètre en C et précision

Résolu
Cereale_killer -  
 Cereale_killer -
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. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
     
    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
  2. Cereale_killer
     
    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. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      oui en utilisant : %.3f au lieu de ton %lf .
      0
      1. Cereale_killer > Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention  
         
        Je viens d'essayer, ca ne marche pas, la précision est encore à 6 chiffres après la virgule..
        0
  3. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  4. Cereale_killer
     
    Je viens d'essayer, ca ne marche pas, la précision est encore à 6 chiffres après la virgule...
    0
    1. Pacorabanix Messages postés 4122 Date d'inscription   Statut Membre Dernière intervention   663
       
      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
  5. Cereale_killer
     
    Effectivement après avoir retesté ca marche !
    Merci !
    0