Heures, minutes, secondes...

Résolu/Fermé
Utilisateur anonyme - Modifié par EchoIsON le 15/02/2016 à 22:29
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 17 févr. 2016 à 12:01
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
15 févr. 2016 à 22:43
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