Heures, minutes, secondes...

Résolu
Utilisateur anonyme -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonsoir,

J'ai un petit problème en C. Je souhaite que mon programme renvoie, à partir des secondes entrées par l'utilisateur, l'équivalent en jours, heures, minutes, secondes.
Tout fonctionne, sauf dans certains cas. Par exemple, lorsque j'entre
6849684141698168161
en secondes, j'obtiens
-23001 jours, -12 heures, -52 minutes et -47 secondes

Ou lorsque j'entre
100000000000000000000000000000000000000000
secondes, j'obtiens des 0 jours, 0 heures, 0 minutes, 0 secondes...
Alors que par exemple avec
7445622
j'obtiens bien
8 jours, 14 heures, 49 minutes et 22 secondes
.
Le problème viendrait-il de la capacité de stockage de long int ?

Voici le code :

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

void clock(int* jours, int* heures, int* minutes, int* secondes);

int main(int argc, char *argv[])
{
    long int jours = 0, heures = 0, minutes = 0, secondes;
    scanf("%d", &secondes);

    clock(&jours, &heures, &minutes, &secondes);

    printf("%d jours, %d heures, %d minutes et %d secondes",jours ,heures, minutes, secondes);

    return 0;
}

void clock(int* jours, int* heures, int* minutes, int* secondes)
{
    *jours = (*secondes/3600)/24;
    *heures = *secondes / 3600;
    *minutes = *secondes / 60;
    *secondes = *secondes % 60;
    *minutes = *minutes % 60;
    *heures = *heures % 24;
}


Merci.
<\EchoIsON>
.

4 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Attention à la cohérence entre les types :
void clock(int* jours, int* heures, int* minutes, int* secondes);
Tu appelles cette fonction avec des long. Il est possible que cela ne change rien sur ta machine (int = long int sur certaines plateformes), mais ce n'est pas bon pour autant.

Sinon, les valeurs que tu as entrées sont trop grandes pour être contenues dans un long. Tu peux essayer avec long long (C90) si tu souhaites plus de place. Mais, ça restera limité...
Tu veux vraiment rentrer des valeurs aussi grandes ? Si oui, il va te falloir implémenter une bibliothèque type BIGNUM.
1