Nekuzor Posté(e) le 6 mai 2006 Signaler Posté(e) le 6 mai 2006 #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; }
ChandlerBing82 Posté(e) le 6 mai 2006 Signaler Posté(e) le 6 mai 2006 on t'a jamais dit que les variables globales c'était le mal?
Nekuzor Posté(e) le 6 mai 2006 Auteur Signaler Posté(e) le 6 mai 2006 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 ) 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 )
ChandlerBing82 Posté(e) le 6 mai 2006 Signaler Posté(e) le 6 mai 2006 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
Nekuzor Posté(e) le 6 mai 2006 Auteur Signaler Posté(e) le 6 mai 2006 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.
ChandlerBing82 Posté(e) le 6 mai 2006 Signaler Posté(e) le 6 mai 2006 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
tosqualler Posté(e) le 6 mai 2006 Signaler Posté(e) le 6 mai 2006 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...
Nekuzor Posté(e) le 6 mai 2006 Auteur Signaler Posté(e) le 6 mai 2006 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
tosqualler Posté(e) le 6 mai 2006 Signaler Posté(e) le 6 mai 2006 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 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 )
kokotchy Posté(e) le 6 mai 2006 Signaler Posté(e) le 6 mai 2006 Un boolean est une variable qui est soit vraie soit fausse.
NekuBe Posté(e) le 6 mai 2006 Signaler Posté(e) le 6 mai 2006 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.
tosqualler Posté(e) le 7 mai 2006 Signaler Posté(e) le 7 mai 2006 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 % != 0 )) // erreur etait (a % == 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 , ; cout << endl << "e = " << e << endl; if ( a == 55 ) bonus (); cout << "Passons a l'adition" ; f = adition ( a , ; cout << endl << "f = "<< f << endl; cout << "Passons a la soustractin" ; h = soustraction ( a , ; cout << endl << "h = "<< h << endl; quitter (); return 0; } [/cpp] EDIT :: trouver l'erreur
ChandlerBing82 Posté(e) le 7 mai 2006 Signaler Posté(e) le 7 mai 2006 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
NekuBe Posté(e) le 7 mai 2006 Signaler Posté(e) le 7 mai 2006 Bon pour ta division avec reste (%), je t'explique : Alors c'est comme tu fesait en primaire 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
tosqualler Posté(e) le 7 mai 2006 Signaler Posté(e) le 7 mai 2006 donc % ne sert a rien dans mon petit prog xD vu qu'on peut fair directement avec un float merci
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.