Faire un traitement special pour une chaine vide? Genre si la chaine est vide tu ne fait rien (ou retourne NULL ou un truc du genre.
Ca parait logique en plus, je crois que j'ai tellement buté dessus que je n'ai même pas pensé à ça...
Merci à toi
J'essayerai demain de mettre une condition pour ça.
Je vais peut être changer ma fonction aussi, pour qu'elle libère la mémoire d'elle même (je le faisais en dehors avant)
Edit :
Je viens de tester maintenant et ça marche.
if(p_player->a_name[0] == '\0')
{
SDL_UpdateRect(p_window, 0, 0, 0, 0);
}
C'est tout bête en plus. Me reste plus qu'à faire une autre condition pour empêcher de saisir + de 11 caractères et je peux passer à une autre fonction :o)
John Carmack's keynote at Quakecon 2013
part 1: http://www.youtube.com/watch?v=eNWAcEu1jpU
part 2: http://www.youtube.com/watch?v=w1sjRD7NSec
part 3: http://www.youtube.com/watch?v=93GwwNLEBFg
part 4: http://www.youtube.com/watch?v=1PhArSujR_A
part 5: http://www.youtube.com/watch?v=cWA_9L70moE
part 6: http://www.youtube.com/watch?v=CcnsJMMsRYk
part 7: http://www.youtube.com/watch?v=-93gUpROf9o
Part 1:
new console cycle
AMD hardware
game controllers
Part 2:
Kinnect
Digital distribution
Portable consoles
Andriod and iOS
Cloud gaming
Creative vision vs technology
Unified memory
PowerVR and tiled rendering
Part 3:
displays
head mounted display
movement tracking
sound
large scale software development
optimization
OpenGL
Part 4:
OpenGL
functional programming
Haskell
Lisp
Scheme
strong and weak typing
multithreading
events
garbage collection
QuakeC vs Scheme
Part 5:
programming
Q&A:
space
AMD vs Nvidia vs Intel GPUs
CPU architectures
GPU computing
id Tech 5
id Software company
Part 6 Q&A:
PC and upcoming console hardware
MegaTexture
virtual reality, augmented reality and Google Glass
voxel, ray tracing
AMDs virtual texturing
console cycle beyond Xbox One and PS4
SSD
strobe lighting in LCD technology
control devices advancement
when single person can do a AAA game like MW3?
Part 7 Q&A:
id Tech5 and Tango Gameworks
Salut ! C'est re moi. Je souhaiterais vous poser une question au niveau C.
Est-ce qu'un programme qui ne fini pas par la fonction main() est mal conçu ?
Ma fonction main() fait appel à une fonction qui initialise le menu, si on clique sur New Game ça fait appel à un autre menu de sélection de nom.
Dans ce menu de sélection, on peut cliquer pour jouer ou pour revenir au menu principal. Pour se faire, je refait appel à ma fonction mainMenu pour appeler le menu principal.
Je ne peux donc pas jongler avec les boucles pour les fermer. Du coup je fais appel à ma fonction exitProgram() qui libère la mémoire et fait un exit(EXIT_SUCCESS).
Est-ce correct de faire ça ?
VampireGirl : Quand tu lances un programme, il faut bien commencer quelque part... et ce quelque part, c'est la fonction « main ». Donc si tu veux un programme valide, il faut que tu définisses une fonction main (où tu veux dans ton code, même si je te suggère de la mettre à la fin du fichier source principal).
Maintenant, parlons de la fin du programme. Normalement, quand tu appelles une fonction (y compris « main »), tout le code de la fonction est excécuté et ça se finit par un « return ». Si on arrive au return de la fonction main, le système sait qu'il n'y a plus rien à exécuter, donc le programme s'arrête.
Ça, c'est la situation normale. Seulement parfois, on veut arrêter le programme en plein milieu du code (cf ta situation). Dans ces cas là, on peut faire un appel à la fonction « exit » déclaée dans « stdlib.h ». Si on appelle cette fonction, le système se charge d'arrêter le programme proprement.
PS : j'ai répondu en faisant abstraction des astuces de gourous.
comme la dit Chris_27, exit n'est pas une sortie catastrophe du programme c'est d'ailleurs la fonction appelée en sortie de main (fait implicitement par le compilateur).
dans le fond ta question c'est si il vaut mieux n'avoir qu'un seul chemin de sortie. plusieurs livres le conseille pour les fonctions (un seul return), perso jmen tape.
Ok merci à vous deux ! :o)
"dans le fond ta question c'est si il vaut mieux n'avoir qu'un seul chemin de sortie."
J'avoue que j'aurai pu poser la question sous cet angla ![]()
Perso, je préfère n'avoir qu'une sortie... mais en C, ça peut être casse-pied à faire. Dans ces cas là, mieux vaut utiliser exit que de rendre le code illisible.
Simple question, pourquoi préfères-tu n'avoir qu'une seule sortie ? Juste question de goût ou autre ?
petite question comme ça, je dois manipuler des grands nombres en C (avec virgules en plus)
Du genre j'ai un uint32 à multiplier par 10^3 puis à diviser par 2^32. Dans le pire des cas j'aimerai avoir un résultat entier. Même si je suppose qu'il existe des types qui permettent des nombres sur 128bits je me demande s'il n'existe pas des astuces pour feinter...
Définis exactement le résultat que tu veux en fonction de l'entrée n de type uint32. Là, ce n'est pas proprement défini.
Pour le reste, je te suggère un cast en double. Tant que tu as moins de 52 bits significatifs, les calculs seront exacts.
erf en fait je me suis complètement planté, je voulais soustraire deux timestamps ntp (sous la forme [ secondes depuis 1900 (32bit) ][ fractions de seconde (32bits) ] alors que deux bêtes soustractions d'uint32 suffisaient ![]()
J'ai une petite question concernant les FPS, voici ma fonction du menu principal :
http://pastebin.com/9fcg5xiT
(Certaines phrases s'affichent sur deux lignes, c'est du à pastebin)
Est-ce que je gère correctement les FPS ? Le programme consomme moins, 9 % du CPU contre 25 % avant sur ma tour.
Mais j'ai bien peur de faire un peu n'importe quoi concernant les FPS.
C'est à la ligne 23, mainMenuButton c'est pour gérer les touches, à la ligne 26 il y a la condition (que je transformerai en fonction après) pour les fps.
Ca a l'air d'être ça, par contre vu que c'est en temps réel ça passe de 14 à 59 en quelque millisecondes seulement.
Je remarque aussi que je devrais faire ça :
fps = (actualTime - previousTime);
sprintf(fpsText, "FPS : %d", fps);
En dehors de la condidition...
Je te conseille de compter le nombre de frame dans une seconde.
Grosso modo à chaque tour de boucle tu ajoutes 1 dans un compteur de frame, et au bout d'une seconde tu affiches ça.
Ton compteur se mettra a jour moins souvent mais sera plus précis.
Pour un max de précision il faut utiliser les compteur comme QueryPerformanceCounter sur Windows. Après c'est à toi de voir ce que tu préfères.
Je ne connais pas trop le C++ mais getline m'a l'air d'être une fonction faite pour les informations déjà formatées (je peux me tromper).
Je me demande si elle ne conserve pas le caractère \n quand tu fais enter après l'âge. Ca expliquerait pourquoi ça ne te laisse pas le temps de demander taper le nom, elle rentre le caractère "\n" dans le nom.
Mais il vaut mieux attendre quelqu'un qui connait le C++ ![]()
Oups j'oubliais de répondre à Paulop
Je vais faire ça alors, c'est vrai que ça sera moins déroutant ![]()
Quand tu appuies sur la touche entrée, tu demandes de passer à la ligne. Il faut bien l'indiquer à l'ordinateur, et ça se fait via le caractère \n qui est invisible.
C'est la caractère qui dit qu'il faut "passer" à la ligne suivante pour mettre en forme un texte. Ne pas le confondre avec \0 qui est le caractère de fin de chaîne (mais tu n'as pas encore vu ça je pense).
Mais je préfère attendre que quelqu'un dise si c'est bien ça ![]()
Justement, tu dis que seul il fonctionne, c'est parce que tu n'aurais pas entré le fameux \n avant
C'est possible ![]()