Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1463 connectés 

  FORUM HardWare.fr
  Programmation
  C

  fonction atoi, 00:00 en entrée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fonction atoi, 00:00 en entrée

n°1923923
Nethacker
rule televisions, rule minds
Posté le 14-09-2009 à 14:27:15  profilanswer
 

Bonjour,
On avait un exercice dans un examen en fin d'année, l'année dernière et je voulais à tout prix le résoudre, en fait il fallait entrer deux heures dans le format 00:00, l'une l'heure de départ d'un vol, et l'autre son heure d'arrivée, sachant que l'avion peut décoller tard la nuit avant minuit et arriver le matin ... bref j'ai fait un petit essai :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int duree(char *depart,char *arrivee)
  4. {
  5. int duree,mdep,marr;
  6. mdep = atoi(&depart[0])*60; // heures * 60
  7. mdep += atoi(&depart[3]); // + minutes
  8. marr = atoi(&arrivee[0])*60; // heures * 60
  9. marr += atoi(&arrivee[3]); // + minutes
  10. duree = marr - mdep;  //différence
  11. return duree;
  12. }
  13. int main()
  14. {
  15. char depart[5],arrivee[5];
  16. int mduree;
  17. printf("Entrez l'heure de départ : \n" );
  18. scanf("%s",depart);
  19. printf("Entrez l'heure d'arrivée : \n" );
  20. scanf("%s",arrivee);
  21. mduree = duree(depart,arrivee);
  22. printf("Durée : %dh %dm \n",(mduree/60),mduree-((mduree/60)*60));
  23. return 0;
  24. }


 
le problème c'est que la fonction atoi ne marche pas dans la première fois où elle est appelée, &depart[0] comme argument, or ça marche bien dans les autres appels !
 
Merci d'avance pour vos éclaircissements !

mood
Publicité
Posté le 14-09-2009 à 14:27:15  profilanswer
 

n°1923924
Taz
bisounours-codeur
Posté le 14-09-2009 à 14:30:31  profilanswer
 

n'utilise pas atoi, utilise strtol, voire sscanf dans ton cas.
 
Et ton utilisation de scanf est tout à fait foireuse, vu que sizeof "00:00" == 6 et non 5. Utilise fgets.

n°1923944
Nethacker
rule televisions, rule minds
Posté le 14-09-2009 à 15:10:01  profilanswer
 

pourquoi sizeof(00:00) == 6 ? c'est tout des caractères, vous voulez dire qu'il y'a un buffer overflow ? atoi dans les autres cas marchent aussi bien !
sinon je vais voir du côté de strtol et sscanf, merci.

n°1923957
ptitchep
Posté le 14-09-2009 à 15:30:09  profilanswer
 

Parce que les chaines de caractères se terminent par \0 en C.

Citation :

La fonction atoi() convertit le début de la chaîne pointée par nptr en entier de type int. Le résultat est identique à un appel
 
    strtol(nptr, (char **)NULL, 10);  
 
à la différence que atoi() ne détecte pas d'erreur.


---------------
deluser --remove-home ptitchep
n°1923977
olivthill
Posté le 14-09-2009 à 16:21:45  profilanswer
 

En C, les chaines de caractères ont un caratère nul (zéro binaire) à la fin. Il ne faut jamais oublier de reserver de la place pour ce caractère supplémentaire.
 
Tout ce qui est entre guillemets, ex. "abc", est une chaine de caractères. Par contre entre apostrophes, il n' y a qu'un caractère unique, ex 'a', sans caractère nul au bout.

n°1924013
Nethacker
rule televisions, rule minds
Posté le 14-09-2009 à 18:18:48  profilanswer
 

NULL ! comment j'ai pu l'oublier, merci tout le monde !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  fonction atoi, 00:00 en entrée

 

Sujets relatifs
[JAVASRIPT] HELP ! Chargement page en fonction d'un test sur TEXTAREAProblème avec la fonction SCardTransmit
Opacité d'une image en fonction de l'avancement d'un preload Calcul de l'inverse d'une fonction de répartition
CATIA V5 - Automatiser la fonction searchPHP - fonction escapeshellcmd()
Fonction pour établir le classement d'un coureur[VBA] Programmer un indicateur coloré en fonction d'une valeur
fonction SQL qui fonctionne impec sous phpmyadmin mais pas en php !Fonction window.open (javascript)
Plus de sujets relatifs à : fonction atoi, 00:00 en entrée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR