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

  FORUM HardWare.fr
  Programmation
  C++

  problème de durée avec mktime()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème de durée avec mktime()

n°1912432
BeCe999
Posté le 06-08-2009 à 15:53:17  profilanswer
 

Bonjour,
 
J'ai un problème sur une fonction de date comme dit dans mon titre.
 
Je ne comprend pas pourquoi le mktime me renvoie -1
 
C'est pour faire un calculateur de temps pour un jeu en ligne.
 
Voici le code :  
 

Code :
  1. #include <iostream>
  2. #include "math.h"
  3. #include "time.h"
  4. using namespace std;
  5. double calculateur(int coor_vivi_attaquant_x, int coor_vivi_attaquant_y, int coor_vivi_cible_x, int coor_vivi_cible_y, char unite[15]);
  6. int main()
  7. {
  8.     // Déclarations des variables
  9.     char village_cible[40], village_attaquant[40];
  10.     int coor_vivi_cible_x, coor_vivi_cible_y, coor_vivi_attaquant_x, coor_vivi_attaquant_y;
  11.     char unite[15];
  12.     double resultat = 0, resultat_soustra = 0, resultat_heure = 0, resultat_min = 0, resultat_sec = 0;
  13.     double resultat_floor = 0;
  14.     int resultat_floor_int = 0;
  15.     struct tm temps = { 0 };
  16.     // Phase de demande
  17.     cout << "Quel est le nom du village attaquant ?" << endl;
  18.     cin >> village_attaquant;
  19.     cout << "Quels sont ses coordonnees en X ?" << endl;
  20.     cin >> coor_vivi_attaquant_x;
  21.     cout << "Quels sont ses coordonnees en Y ?" << endl;
  22.     cin >> coor_vivi_attaquant_y;
  23.     cout << "Quel est le nom du village cible ?" << endl;
  24.     cin >> village_cible;
  25.     cout << "Quels sont ses coordonnees en X ?" << endl;
  26.     cin >> coor_vivi_cible_x;
  27.     cout << "Quels sont ses coordonnees en Y ?" << endl;
  28.     cin >> coor_vivi_cible_y;
  29.     cout << "Quelle est l'unite la plus lente ?" << endl;
  30.     cin >> unite;
  31.    
  32.     //mise en place du resultat dans une structure tm
  33.     resultat = calculateur(coor_vivi_attaquant_x, coor_vivi_attaquant_y, coor_vivi_cible_x, coor_vivi_cible_y, unite);
  34.     resultat_floor = floor(resultat);
  35.     temps.tm_mday = resultat_floor;
  36.     resultat_soustra = resultat - resultat_floor;
  37.     resultat_heure = resultat_soustra * 24;
  38.     resultat_floor = floor(resultat_heure);
  39.     temps.tm_hour = resultat_floor;
  40.     resultat_soustra = resultat_heure - resultat_floor;
  41.     resultat_min = resultat_soustra * 60;
  42.     resultat_floor = floor(resultat_min);
  43.     temps.tm_min = resultat_floor;
  44.     resultat_soustra = resultat_min - resultat_floor;
  45.     resultat_sec = resultat_soustra * 60;
  46.     resultat_floor = floor(resultat_sec);
  47.     temps.tm_sec = resultat_floor;
  48.     //affichage
  49.     cout << temps.tm_mday << "/" << temps.tm_mon << "/" << temps.tm_year << "  ";
  50.     cout << temps.tm_hour << " : " << temps.tm_min << " : " << temps.tm_sec << endl;
  51.     cout << "Soit : " << temps.tm_mday << " jour(s), " << temps.tm_hour << " heure(s), " << temps.tm_min << " minute(s) et "
  52.          << temps.tm_sec << " seconde(s)." << endl;
  53.     time_t epoch = mktime(&temps);
  54.     cout << epoch << endl;
  55.     return 0;
  56. }
  57. double calculateur(int coor_vivi_attaquant_x, int coor_vivi_attaquant_y, int coor_vivi_cible_x, int coor_vivi_cible_y, char unite[15])
  58. {
  59.     double valeur = 0, valeur2 = 0, result_valeur = 0, absolue = 0, absolue2 = 0;
  60.     double puissance = 0, puissance2 = 0, racine = 0, valeur_calculee = 0;
  61.     int unites_const = 0;
  62.     char comte[15] = "Comte", templier[15] = "Templier", ecuyer[15] = "Ecuyer", sauvage[15] = "Sauvage", grand_arc[15] = "Grand Arc";
  63.     char eclaireur[15] = "Eclaireur", croise[15] = "Croise", chevalier_noir[15] = "Chevalier Noir", belier[15] = "Belier";
  64.     char trebuchet[15] = "Trebuchet";
  65.     if (strcmp(unite, comte) == 0)
  66.         unites_const = 35;
  67.     if (strcmp(unite, templier) == 0)
  68.         unites_const = 22;
  69.     if (strcmp(unite, ecuyer) == 0)
  70.         unites_const = 18;
  71.     if (strcmp(unite, sauvage) == 0)
  72.         unites_const = 18;
  73.     if (strcmp(unite, grand_arc) == 0)
  74.         unites_const = 18;
  75.     if (strcmp(unite, trebuchet) == 0)
  76.         unites_const = 30;
  77.     if (strcmp(unite, eclaireur) == 0)
  78.         unites_const = 9;
  79.     if (strcmp(unite, croise) == 0)
  80.         unites_const = 10;
  81.     if (strcmp(unite, chevalier_noir) == 0)
  82.         unites_const = 11;
  83.     if (strcmp(unite, belier) == 0)
  84.         unites_const = 30;
  85.     valeur = coor_vivi_cible_x - coor_vivi_attaquant_x;
  86.     valeur2 = coor_vivi_cible_y - coor_vivi_attaquant_y;
  87.     absolue = fabs(valeur);
  88.     absolue2 = fabs(valeur2);
  89.     puissance = pow(absolue, 2);
  90.     puissance2 = pow(absolue2, 2);
  91.     result_valeur = puissance + puissance2;
  92.     racine = sqrt(result_valeur);
  93.     valeur_calculee = racine * unites_const * 60 / 86400;
  94.     return valeur_calculee;
  95. }


 
Si quelqu'un peut m'aider je lui en serais très reconnaissant je galère dessus depuis pas mal de temps.

mood
Publicité
Posté le 06-08-2009 à 15:53:17  profilanswer
 

n°1912477
Taz
bisounours-codeur
Posté le 06-08-2009 à 16:31:53  profilanswer
 

Joli C.
 
Au pif, tes mois tu les numérotes comment ?
Elle ressemble à quoi ta struct tm que tu donnes à mktime ?

n°1912487
BeCe999
Posté le 06-08-2009 à 16:40:00  profilanswer
 

je ne met pas de mois, les attaques (ici c'est de cela qu'il s'agit), ont une durée maximum de plusieurs jours tout au plus.
Donc je ne met pas de mois dans la structure tm.
Mais si j'en met ils sont numérotés de 0 -> 11.
La strucure tm prend tous les résultat des floor().
exemple,  
  temps.tm_mday = 1;
  temps.tm_hour = 12;
  temps.tm_min = 36;
  temps.tm_sec = 22;

n°1912502
tpierron
Posté le 06-08-2009 à 16:58:37  profilanswer
 

J'ai peut-être pas tout pigé dans ta logique, mais il y a un truc qui me parait bizarre dans ton code.
 
Ta fonction calculateur() semble manipuler des secondes, que tu transformes en struct tm pour passer à mktime, qui te renverra des secondes à nouveau ?
 
C'est quoi l'intérêt  [:opus dei] ?

n°1912521
BeCe999
Posté le 06-08-2009 à 17:07:48  profilanswer
 

oui, j'étais en train de relire, et effectivement ma logique d'il y a deux semaines me paraissais bizarre aujourd'hui, surtout après avoir relu les prtotypes ;)
Mais en faite, ce que je veux faire, c'est arrivé a mettre les secondes que j'ai calculées dans un time_t pour pouvoir ensuite faire un difftime() et afficher le résultats.
Parce que le résultat que j'obtiens, c'est le nombre de secondes qu'il faut retrancher a une date que l'utilisateur rentrera.
 
Donc je ne sais pas comment on met les secondes dans un time_t.

n°1912553
Joel F
Real men use unique_ptr
Posté le 06-08-2009 à 18:11:35  profilanswer
 

sinon boost::date_time

n°1912560
BeCe999
Posté le 06-08-2009 à 18:36:41  profilanswer
 

heu...
Cela provient d'ou cette fonction ??

n°1912566
Joel F
Real men use unique_ptr
Posté le 06-08-2009 à 18:55:10  profilanswer
 
n°1912572
BeCe999
Posté le 06-08-2009 à 19:16:55  profilanswer
 

Oui cela je l'avais compris ce que je demandais, c'est si cela était du standart (librarie)?

n°1912573
BeCe999
Posté le 06-08-2009 à 19:20:21  profilanswer
 

Bon, c'est bon je viens de regarder, escusez-moi le post inutile d'au-dessus, est-ce que tu pourrais m'expliquer comment fonction cette fonction ?

mood
Publicité
Posté le 06-08-2009 à 19:20:21  profilanswer
 

n°1912576
Joel F
Real men use unique_ptr
Posté le 06-08-2009 à 19:30:28  profilanswer
 

Tout est dans le lien. Jeff a ecrit une tres bonne doc.

n°1912582
BeCe999
Posté le 06-08-2009 à 19:50:58  profilanswer
 

OK, merci, mais le lien, je ne le vois pas. Mais j'ai quand même trouvé.
Une dernière question, est-ce que cette instruction est valide :  
  time_t essai = xxxxxxxxx; //x représentant des chiffres.

n°1912598
Joel F
Real men use unique_ptr
Posté le 06-08-2009 à 21:45:57  profilanswer
 

lien : truc bleu clickable dans le post du dessu :o
 
http://www.boost.org/doc/libs/1_39 [...] _time.html

n°1912681
BeCe999
Posté le 07-08-2009 à 10:00:24  profilanswer
 

Oki escuse moi je ne l'avais pas vu, il étais bien caché :)
Merci.


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

  problème de durée avec mktime()

 

Sujets relatifs
PROBLEME d'if comportant un lienProblème tableau
Product could not be found: Probleme de Manifest.mf?Probleme de trier par ordre alphabétique de tableau
Gros problème de Mappage de lecteurs réseaux [ Résolu]probleme de lancement d'eclipse !! an error has occured. see the log
Problème d'affichage des caractères accentuésprobleme include avec g++ 2.95 et pas avec g++ 4.3.3
Problème dans une macro devant faire un triProblème Formulaire de contact
Plus de sujets relatifs à : problème de durée avec mktime()


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