Heures, minutes, secondes...
Résolu
Utilisateur anonyme
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[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
Ou lorsque j'entre
Alors que par exemple avec
Le problème viendrait-il de la capacité de stockage de long int ?
Voici le code :
Merci.
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
6849684141698168161en secondes, j'obtiens
-23001 jours, -12 heures, -52 minutes et -47 secondes
Ou lorsque j'entre
100000000000000000000000000000000000000000secondes, j'obtiens des 0 jours, 0 heures, 0 minutes, 0 secondes...
Alors que par exemple avec
7445622j'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>.
A voir également:
- Algorithme heure minute seconde
- 3654 seconde en heure, minute et seconde ✓ - Forum Bureautique
- 35 go internet équivalent en heure ✓ - Forum Free mobile
- Colissimo heure de livraison après-midi - Forum Consommation & Internet
- Changement d'heure - Guide
- 1 milliard en seconde - Accueil - Technologies
4 réponses
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.
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.