Tuto :: L'heure c++ en Heure, Minutes, Secondes (8 Digits)


Nekuzor

Messages recommandés

Posté(e)
#include "stdlib.h"
#include "windows.h"
#include "stdio.h"

char TheTime[11];

char *Time()
{
//On initialise notre variable qui va contenir l'heure
memset(TheTime,'\0',sizeof(TheTime));

//On definit une variable de type SYSTEMTIME qui va nous permettre de recupérer l'heure systeme
SYSTEMTIME st;
//On recupere l'heure systeme
GetLocalTime(&st); 
//On définit 3 variable entiere (1 pour l'heure, 1 pour les minutes, et 1 pour les secondes)
int secondes, minutes, heures; 

//On sépare de la variable st (de type SYSTEMTIME) l'heure, les minutes, et les secondes
heures = st.wHour; 
minutes = st.wMinute;
secondes = st.wSecond;

//Maintenant il reste un probleme c'est que si l'heure, les minutes ou les secondes sont inférieur à 10 il n'affiche pas de 0 devant.
//Donc on va tester chaque partie pour vois si c'est plus petit ou pas que 10
//Si oui on ajoute un 0
//Sinon on laisse telquel

if (heures < 10)
{
 sprintf(TheTime,"<0%i:",heures);
}
else
{
 sprintf(TheTime,"<%i:",heures);
}
if (minutes < 10)
{
 char Minutes[5];
 memset(Minutes,'\0',sizeof(Minutes));
 sprintf(Minutes,"0%i:",minutes);
 strcat(TheTime,Minutes);
}
else
{
 char Minutes[5];
 memset(Minutes,'\0',sizeof(Minutes));
 sprintf(Minutes,"%i:",minutes);
 strcat(TheTime,Minutes);
}
if (secondes < 10)
{
 char Secondes[5];
 memset(Secondes,'\0',sizeof(Secondes));
 sprintf(Secondes,"0%i>",secondes);
 strcat(TheTime,Secondes);
}
else
{
 char Secondes[5];
 memset(Secondes,'\0',sizeof(Secondes));
 sprintf(Secondes,"%i>",secondes);
 strcat(TheTime,Secondes);
}

//Notre fonction nous renvoie la valeur de TheTime (variable qui contient la chaine de caratere indiquant l'heure system au format désiré) 
return TheTime;
}

Posté(e)

Le mal pourquoi ? :s

Si elle est global c'est pour une question d'optimisation ...

Je m'explique :

Si tu désire avoir l'heure 500 fois en 1s (c'est ton droit de faire des boucle de fou :P )

Ben au lieu d'appeler 500 fois ta fonction -> ca prend du temps

tu relis 500 fois ta variable (car de toute maniere lire 500 fois en 1s ou 500 fois la fonction, la derniere seconde n'aura pas changée).

Y en à qui voye peu être pas l'utilité dans cette catégorie de montrer une fonction donnant l'heure.

On peu tres bien imaginer que dans votre MOD vous désiriez l'heure (un peu comme dans WoW :P)

Posté(e)

euh optimisation ou pas, on m'a toujours dit que les variables globales étaient vraiment pas le truc a utiliser :/

Ce que tu pourrais faire c'est déclarer ta fonction dans la fonction appelante et passer cette variable en parametre a ta fonction.

Cela ferait un code plus propre car on sait a quoi correspond ta variable, la elle est déclaré dans la nature

Posté(e)

Les variables globales ne sont pas un probleme.

Le seul truc qui faut faire attention, c'est que si tu as une variable globales d'un certain nom de ne pas utiliser ce même nom pour une autre variables, c'est à toi à bien gerer le nom de tes variables, et chez moi cette variables n'est pas dans la nature, puisque cette fonction se trouve dans un fichier nommé "SysTime.cpp".

Donc lorsque je vois cette variable, je sais très bien à quoi elle correspond.

Posté(e)

c'est surtout par soucis de relecture de ton code, toi tu sais a quoi elle correspond mais quelqu'un qui va lire ton code ne le saura pas forcément.

De plus c'est une convention je crois de ne pas mettre de variable globale.

La déclarer dans ta fonction appelante fait plus propre a mon sens

Posté(e)

Je suis en plein livre sur le C++, page 120 sur les 800 et quelque...

Les variables globales sont source de bogue et autre problèmes du fait que n'importe qu'elle fonction peut la changer. Maintenant une variable local, du même nom que la global, est prioritaire dans la fonction...

[cpp]#include "stdlib.h"

#include "stdio.h"[/cpp]

stdio.h c'est pas plutôt du C ça?

Me fiant a mon livre la bibliothèque AINSI du C++ est "iostream"

et dans des EBOOK je vois stdio pour le C...

Enfin si je me trompe dites le moi :)

iostream

ecrire a l'ecran

[cpp]std::cout << " coucou" << variable;[/cpp]

std dit qu'on utilise iostream

cout ecrit

<< dit le sens des infos

( pour entrer valeur c'est >> avec cin comme

[cpp]std::cin >> a;[/cpp] )

Le NEKU ici c'est toi?

http://forum.vossey.com/vosseycom/Serveursdejeux/Les-fameux-N-P-sujet-1887-1.htm

http://forum.vossey.com/vosseycom/Serveursdejeux/CS-H-D-Neku-ANNULe-sujet-1478-1.htm

http://forum.vossey.com/vosseycom/Serveursdejeux/CS-H-D-A-Fn-Neku-sujet-1871-1.htm

http://forum.vossey.com/vosseycom/Serveursdejeux/CS-N-P-Neku-STEAM_0-5392600-sujet-1888-1.htm

car dans un des post me souvien qu'il parlait de la programation d'un cheat...

Posté(e)

Comme, je ne n'aime pas mentir, je dois avouer que oui, c'est de moi que l'on parle dans ses posts.

Alors oui il y a

et count affiche certaine valeur au niveau des caractère d'échapement telquel, tandis que sprintf(); les traites, je sais plus trop bien la différence.

mais que tu utilise une librairie C ou C++ cela ne change pas trop de choses, d'ailleur pour le traitement de chaine de caractère je préfere utiliser les librairies C, et tu remarquera que beaucoup de personnes font encore comme ca.

Les variables globales ou locales si sont mal déclarée et initialisée sont source de bogue.

c'est pas car tu as déclaré une variable écrit dedans et que sa affiche correctement que ca va fonctionner correctement ;)

du style :

char Test[256]; //Tableau de caractères de 256 caractere

sprintf(Test,"Salut"); //On ecrit dans le tableau de caractère

printf("%s",Test); //On affiche le tableau de caractère

voila ce morceau de code va très bien fonctionner si tu as de la chance, j'explique:

Le problème c'est que tu n'as pas initialisé ton tableau donc il n'est pas zéro terminé ('\0').

Donc lorsque tu va vouloir afficher il va afficher ton text correct ou pas, dans le cas ou pas c'est qu'il va afficher pleins de caractères étranges après ou planter, c'est car comme ta chaine n'est pas zéro terminée il ne trouve pas la fin de ta chaine et donc lit toute la mémoire qui suis jusque par chance tombé sur '\0' ou pas, si pas il va te lire toute ta ram et finir par planter.

Donc il faut initialiser comme ca :

char Test[256]; //Tableau de caractères de 256 caractere
memset(Test,'\0',sizeof(Test)); //On initialise le tableau

sprintf(Test,"Salut"); //On ecrit dans le tableau de caractère

printf("%s",Test); //On affiche le tableau de caractère

Posté(e)

je vais être franc aussi, je ne t'aime pas xD mais je suis bon joueur et j'aime apprendre et découvrir :) donc je vais faire comme si tu étais un autre neku ;) aussi j'aime bien ton image :D

je ne suis pas encore au tableau et en C je m'étais arrêter pile avant donc je ne comprend pas tout ton code 8-)

Sinon je vois aussi souvent les "commande" C dans du C++...

Si tu te met a bidouiller le SDK d'half-life 2, je suis partant pour t'aider ou me faire aider :), j'ai 3 projet pour le site ou je bloque mais après mon livre et mes exams je m'y remettrais :)

Ton client IRC, tu a fais tout tout seul ou tu as tiré des parties d'un client d'un cheats...Sachant qu'il intègre un client irc...

C'était un truc que je me demandais :)

Et au passage je comprend pas ce qu'est un bool ( boolean ) et comme comprend un % ( reste dans une division 10%3 )

Posté(e)

Mon client, je l'ai fait totalement seul.

je n'ai tiré aucune partie de cheat, c'est pour cette raison que le vac le laisse trankil.

PS pour les modo : Merci de pas me bannir, je ne vois pas ce que je fais de mal à aider des gens dans leur quête de savoir, cela ne sert à rien de bannir pour des activités passées, j'aurais pu nier car j'avais anticipé cette réaction mais je ne l'ai pas fait, et de plus je ne polue plus cs avec ce genre de comportement puisque je n'y joue plus ou casi et quand j'y joue c'est clean.

Posté(e)

C'etais pas mechant ni quoi que se soit pour le client irc ;) , c'etais juste pour savoir, et comme tu la fait tout tout seul je te dit un grand GG :)

tu as une idée pour le % du reste ?

voici un bete code avec division, multiplication, addition, soustraction. Truc que j'ai fait pour mieu comprendre les fonctions.

[cpp]

#include

using namespace std; //dit que j'utilise la librairie iostream, evite de mettre std::cout

typedef short int toto; // alias

float division ( int premier, int deuxieme); // fonction

int multi ( int premier, int deuxieme); // fonction

int adition ( int premier, int deuxieme); // fonction

int soustraction ( int premier, int deuxieme); // fonction

void bonus (); // fonction

void quitter (); // fonction

float division ( int prem, int deux )

{

return ( prem / deux );

}

int multi ( int prem, int deux )

{

return ( prem * deux );

}

int adition ( int prem, int deux )

{

return ( prem + deux );

}

int soustraction ( int prem, int deux )

{

return ( prem - deux );

}

void bonus ()

{

cout << endl << "Bonus !!!!! " << endl;

cout << "\a\a\a\a";

cout << endl;

}

void quitter ()

{

toto quit;

cout << endl << "Met une valeur pour quitter" << endl;

cin >> quit;

}

int main ()

{

toto a , b, c, e, f, h;

float g;

cout << "Salut, tapes 2 nombres " << endl;

cout << "a : ";

cin >> a;

cout << "b : ";

cin >> b;

if ( ( b == 0 ) || ( (a % B) != 0 )) // erreur etait (a % B) == 0

{

if ( b == 0 )

{

cout << "\a---division par 0 impossible---\a" << endl;

}

else

{

g = a % b; // bug ?, avertissement renvoyé par le compilateur

}

}

if ( b != 0 )

{

cout << "Division de a par b" << endl;

c= division ( a , b );

if ( g == 0)

{

cout << "c = " << c << endl;

}

else

{

cout << "c = " << c << " avec un reste de :: " << g << endl;

}

}

cout << "Passons a la multiplication" ;

e = multi ( a , B);

cout << endl << "e = " << e << endl;

if ( a == 55 )

bonus ();

cout << "Passons a l'adition" ;

f = adition ( a , B);

cout << endl << "f = "<< f << endl;

cout << "Passons a la soustractin" ;

h = soustraction ( a , B);

cout << endl << "h = "<< h << endl;

quitter ();

return 0;

}

[/cpp]

EDIT :: trouver l'erreur

Posté(e)

Nekube, je ne vois pas pourquoi on te bannirait. C'est une discussion, un échange de deux points de vue. Il n'y a aucun probleme la dessus. Pour ce que tu as fait avant, a vrai dire, ce n'est pas notre probleme. Il n'y a aucune raison qu'on te ban :)

Posté(e)

Bon pour ta division avec reste (%), je t'explique :

Alors c'est comme tu fesait en primaire :P

En vb % = Mod (modulo)

Explication :

11 / 3 = 3.666666666

Mais en C ou C++ quand tu fait une division sur un entier (int) il te retroune un entier, donc :

11 / 3 = 3

et 11 % 3 = 2

Pourquoi ?

Ben c'est assé simple :

11 | 3

|---

|3 (le nombre de fois que 3 rentre dans 11)

|

Donc 3 * 3 = 9

-> 11 - 9 = 2

Et voila notre fameux reste ^^

Maintenant pour avoir un nombre décimal, il suffit de diviser ton reste par ton diviseur

2 / 3 = 0.66666666667 (est un float ou double)

tu additione (en float ou double) :

float x = 0;

int z = 0;

z = 11 / 3;

x = z + ((11 % 3) / 3)

et tu obtiendra 3.6666666667

mais il est mieux de le faire directement en float alors, si c'est pour avoir un nombre à virgules ;)

float x = 0;

x = 11 / 3;

et tu obtiendra 3.6666667

Voila j'espere avoir été clair

Alors pour ton avertissement, c'est que % est utiliser sur des entier et ta variable g est en float, ce qui n'a aucun interet à par de manger plus de mémoire ;)

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.