Se connecter avec
S'enregistrer | Connectez-vous

[Resolu]Question sur un programme

Dernière réponse : dans Programmation

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

Lassé par la pub ? Créez un compte
Expert Programmation

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.

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 :) 
Expert Programmation

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. }
Lassé par la pub ? Créez un compte
Tom's guide dans le monde