Se connecter / S'enregistrer
Votre question

[Resolu]Question sur un programme

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
13 Janvier 2011 15:59:06

Bonjour,

J'ai fait un petit programme qui converti les secondes rentrées en xxH XXmin XXs et ca a l'air de fonctionner quand j'entre des valeurs compris entre [0;3599] des que je tape une valeur = ou > a 3600 ca plante et il y a aussi un probleme c'est que pr les valeurs <3600 il m'affiche tout le temps <null>H au lieu de 0H
(ex: j'entre 350 ca m'affiche <null>h 5min 50s)
Voici le code, quelqu'un peut il m'aidez svp.
  1. #include <stdio.h>
  2. #include <string.h>
  3. typedef struct
  4. {
  5. int heure;
  6. int minute;
  7. int seconde;
  8. }typeHeure;
  9.  
  10. void main (void)
  11. {
  12. typeHeure Heure;
  13. long s;
  14. printf("entrez secs\n");
  15. scanf("%d",&s);
  16. Heure.heure=s/3600;
  17. if(s>=3600)
  18. {
  19. Heure.minute=s%3600;
  20. }
  21. else
  22. {
  23. Heure.minute=s/60;
  24. }
  25. Heure.seconde=s%60;
  26. printf("Ca donne %sh %dmin %ds\n", Heure.heure, Heure.minute, Heure.seconde);
  27. gets(s);
  28. }

Autres pages sur : resolu question programme

a c 145 L Programmation
13 Janvier 2011 16:13:59

Je vais être brute: ton algo est faux
Voici ce qui me semble juste:
  1. if (s>=3600)
  2. {
  3. Heure.heure = s/3600;
  4. } else {
  5. Heure.heure = 0;
  6. }
  7. s = (s-(Heure.heure * 3600))/60;
  8. if (s>=60) {
  9. Heure.minute = s/60;
  10. } else {
  11. Heure.minute = 0;
  12. }
  13. Heure.seconde = (s-(Heure.minute * 60))/60;

Je ne suis pas certain à 100%, je fais ça de tête, mais ce principe me semble plus juste que le tien.
Il reste tout de même un moyen bien plus simple: considérer que ton nombre de seconde est un timestamp, et donc utiliser strftime pour en sortir directement ta conversion.
m
0
l
13 Janvier 2011 16:37:29

merci de ta reponse, j'ai tester ton code ca ne fonctionne pas meme pour des valeur <3600 et ca m'affiche toujours la meme fenetre d'erreur qui dit
Exception non gérée à 0x5f5414cf (msvcr100d.dll) dans Test.exe : 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000001.
quand jentre une valeur > 3600. et je n'ai pas droit d'utiliser autre chose que des trucs basics pour le faire :) 
m
0
l
Contenus similaires
a c 145 L Programmation
13 Janvier 2011 17:31:43

Oui, j'ai un peu foiré mon truc.
Voici quelque chose de testé:
  1. #include <stdio.h>
  2. #include <string.h>
  3. typedef struct
  4. {
  5. int heure;
  6. int minute;
  7. int seconde;
  8. }typeHeure;
  9.  
  10. void main (void)
  11. {
  12. typeHeure Heure;
  13. long s;
  14. printf("entrez secs\n" );
  15. scanf("%li",&s);
  16. if (s>=3600)
  17. {
  18. Heure.heure = s/3600;
  19. } else {
  20. Heure.heure = 0;
  21. }
  22. s = s-(Heure.heure * 3600);
  23. if (s>=60) {
  24. Heure.minute = s/60;
  25. } else {
  26. Heure.minute = 0;
  27. }
  28. Heure.seconde = s-(Heure.minute * 60);
  29. printf("Ca donne %ih %i m %i s\n", Heure.heure, Heure.minute, Heure.seconde);
  30. }
m
0
l
13 Janvier 2011 18:13:42

effectivement ca marche merci bcp le probleme d'erreur viendrai du fait de "%d" dans le scanf mais avec un "%li" ca fonctionne pour des valeur audela de 3600.
m
0
l
a c 145 L Programmation
13 Janvier 2011 21:44:50

Je suis même étonné que tu n'ais pas eu d'erreurs bloquantes à la compilation.
m
0
l
13 Janvier 2011 22:14:47

en fait jai juste fais une erreur sur les minute qui etait Heure.minute=(s/60)%60; sinon tout marche nikel en changeant %d en %li
m
0
l
a c 145 L Programmation
14 Janvier 2011 08:59:39

Ah oui ! En fait c'est cette partie là qui me faisait dire que ton algo était faux, effectivement là c'est parfaitement clair et juste, et plus court que ce que j'ai fait.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS