On t'auras XANA
 Groupe : Membres
|
Bonsoir à tous,
Voici mon problème:
Je voudrais que en appuyant sur le touche 4 du pavé numérique, ça quitte le programme.
Mais quand j'appui sur n'importe qu'elle autre touche, cela fait la même chose, hors je ne veux pas qu'il quitte sur on appui sur autre chose que la touche 4 du pavé numérique.
Voici le code en question:
Code : C 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | bool boucler = true;
SDL_Event evenement;
while (boucler)
{
SDL_WaitEvent(&evenement);
switch(evenement.type)
{
case SDL_KEYDOWN:
switch (evenement.key.keysym.sym)
{
case SDLK_KP4:
boucler = false;
break;
}
case SDL_QUIT:
boucler = false;
break;
}
}
|
Merci à celui qui pourra m'aider.
|
Groupe : Membres
|
 Cette réponse a aidé l'auteur du sujet
Il manque un break après la boucle de SDL_KEYDOWN ce qui fait que les instructions de SDL_QUIT sont aussi exécutés.
|
le C++, j'en mange!
 Groupe : Bannis
|
Citation : lanfeusstIl manque un break après la boucle de SDL_KEYDOWN ce qui fait que les instructions de SDL_QUIT sont aussi exécutés.
break permet simplement de sortir du switch si le cas courant est executé, donc c'est pas ça le probleme
|
Groupe : Membres
|
bah si, imagine ce qui se passe quand il tape au clavier :
- le programme rentre dans la boucle SDL_KEYDOWN
- si c'est la touche 4 alors boucler = false puis il sort du switch de SDL_KEYDOWN
-ensuite il continue dans SDL_QUIT car il n'y a pas de break après l'accolade fermante du switch(evenement.key.keysym.sym)
- et donc boucler = false
|
 Groupe : Membres
|
N'imbriquez pas de switchs !!!
faites des fonctions a la place !
Édité
le 08/05/2008 à 23:20:21
par Fvirtman
|
le C++, j'en mange!
 Groupe : Bannis
|
"ensuite il continue dans SDL_QUIT car il n'y a pas de break après l'accolade fermante du switch(evenement.key.keysym.sym)"
il n'entrera dans la SDL_QUIT que si la feetre est fermée
|
Yamo...
 Groupe : Membres
|
Citation : total chaos"ensuite il continue dans SDL_QUIT car il n'y a pas de break après l'accolade fermante du switch(evenement.key.keysym.sym)"
il n'entrera dans la SDL_QUIT que si la feetre est fermée Il n'a pas besoin d'y entrer, il est déjà dedans puisqu'il n'est pas sorti du SDL_KEYDOWN puisqu'il n'a pas rencontré de break.
Code : C++ 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #include <iostream>
using namespace std;
int main() {
int a = 10;
switch(a) {
case 1:
cout << "exec pour 1" << endl;
case 10:
cout << "exec pour 10" << endl;
case 100:
cout << "exec pour 100" << endl;
break;
case 1000:
cout << "exec pour 1000" << endl;
}
}
|
Comme tu peux le voir ceci affiche exec pour 10 et exec pour 100.
|
On t'auras XANA
 Groupe : Membres
|
J'avais effectivement pas vu mon oubli du break, là suis sous Windows donc je verrais demain en retournant sous Linux(a moins que je comprenne sans IDE comment utiliser un fichier .lib au lieu d'un .a  ).
EDIT: C'est bon je viens d'essayer en rajoutant le break oublié, et effectivement ça fonctionne parfaitement.
|