Pages : 1
#1 Le 29/04/2006, à 17:14
- crygor
[C++] Debutant condition[resolu]
Hellow,
je débute en ce moment en c++. J'ai un problème qui est surement très simple a contourner, mais je ne trouve pas. Voici le code :
int etat=0;
while(1){
if(etat=0){ action(); etat=1;}
if(etat=1){ action(); etat=0;}
}
J'ai gran,dement simplifié le code. Donc, je voudrais que le changement d'état qui est effectué si une condition est effectuée n'affecte pas le prochaine test de condition. C'est à dire que ma variable etat est bien égale à 0, donc elle se fixe 1, mais je ne veux pas qu'elle soit tester true dans la seconde condition... c'est dur à expliquer.
Quelqu'un voit?
++
crygor
Dernière modification par crygor (Le 29/04/2006, à 18:59)
Hors ligne
#2 Le 29/04/2006, à 17:38
- thom
Re : [C++] Debutant condition[resolu]
jette un oeil ici : http://ltiwww.epfl.ch/Cxx/c1_3.html
Dernière modification par thom (Le 29/04/2006, à 17:41)
-> Ubuntu on a Sony Vaio VNG-FS115B
-> Wificonfig is a little script aimed to ease the switching between networks, for people who have 2 network cards : a wired one and a wireless one.
Hors ligne
#3 Le 29/04/2006, à 18:03
- bergi
Re : [C++] Debutant condition[resolu]
int etat=0;
while(1){
if(etat=0){
action();
etat=1;
}else{
action();
etat=0;
}
}
Enfin sais plus dur de te comprendre que du code C donc je sais pas si ca correspond a ce que tu veux
En fait tuveux faire une action une fois sur deux non ?
Dernière modification par bergi (Le 29/04/2006, à 18:04)
Hors ligne
#4 Le 29/04/2006, à 18:45
- crygor
Re : [C++] Debutant condition[resolu]
Oui.. je veux faire une action une fois sur deux... mais apparemment mon code est trop réduit, je vais le mettre en entier (en plus j'ai boulié un égal a chaque condition en simplifiant mon code...)
int fin=0;
int etat=0;
while(fin==0){
SDL_Event e_fin;
while (SDL_PollEvent(&e_fin)){
if(e_fin.type==SDL_QUIT){
fin = 1;
}
if (e_fin.type == SDL_KEYDOWN ){
switch(e_fin.key.keysym.sym){
case SDLK_ESCAPE:
fin = 1;
break;
case SDLK_DOWN:
if(etat==0){ perso = SDL_LoadBMP("img.bmp"); etat=1;}
if(etat==1){ perso = SDL_LoadBMP("img2.bmp"); etat=0;}
cout<< etat;
position.y+=10;
SDL_SetColorKey(perso, SDL_SRCCOLORKEY, SDL_MapRGB(perso->format, 228, 0, 255));
SDL_FillRect(ecran , NULL, couleurback);
SDL_BlitSurface(perso, NULL, ecran, &position);
SDL_Flip(ecran);
break;
case SDLK_UP:
if(etat==0){ perso = SDL_LoadBMP("img.bmp"); etat=1;}
if(etat==1){ perso = SDL_LoadBMP("img2.bmp"); etat=0;}
position.y-=10;
SDL_SetColorKey(perso, SDL_SRCCOLORKEY, SDL_MapRGB(perso->format, 228, 0, 255));
SDL_FillRect(ecran , NULL, couleurback);
SDL_BlitSurface(perso, NULL, ecran, &position);
SDL_Flip(ecran);
break;
case SDLK_LEFT:
if(etat==0){ perso = SDL_LoadBMP("img.bmp"); etat=1;}
if(etat==1){ perso = SDL_LoadBMP("img2.bmp"); etat=0;}
position.x-=10;
SDL_SetColorKey(perso, SDL_SRCCOLORKEY, SDL_MapRGB(perso->format, 228, 0, 255));
SDL_FillRect(ecran , NULL, couleurback);
SDL_BlitSurface(perso, NULL, ecran, &position);
SDL_Flip(ecran);
break;
case SDLK_RIGHT:
if(etat==0){ perso = SDL_LoadBMP("img.bmp"); etat=1;}
if(etat==1){ perso = SDL_LoadBMP("img2.bmp"); etat=0;}
position.x+=10;
SDL_SetColorKey(perso, SDL_SRCCOLORKEY, SDL_MapRGB(perso->format, 228, 0, 255));
SDL_FillRect(ecran , NULL, couleurback);
SDL_BlitSurface(perso, NULL, ecran, &position);
SDL_Flip(ecran);
break;
}
}
}
}
Donc, quandj'appuie sur la flèche du bas, il n'y a que des 0 qui s'affichent, et aucun changement dns l'image.
[Resolu] : ... Il suffisait de mettre un else.. mais fallait pas oublié le second égal dans la poremière cond, sinon ça marche pas. Désolé.
Dernière modification par crygor (Le 29/04/2006, à 19:00)
Hors ligne
#5 Le 02/05/2006, à 17:27
- lost-in-the-shell
Re : [C++] Debutant condition[resolu]
Attention aux fautes courantes dans les tests de condition à la if(maValeur = 0) : ton programme va renvoyer vrai si maValeur a pu être correctement changée à 0. Pour un test de condition, c'est == .
C'est un coup à créer une backdoor, des oublis comme ça. Dans le code source de Linux, une porte dérobée avait pour code :
if(... && current->uid = 0)
Ici current->uid passe à 0, donc l'utilisateur qui éxecute la commande correspondant au if devient root !
source : http://fr.wikipedia.org/wiki/Porte_d%C3 … %A9e#Linux
Aussi, je recommande dans des cas pareils d'utiliser un switch :
switch(etat) {
case 0: action(); etat = 1; break;
default: action(); etat = 0; break;
}
Linux user #401253 - Ubuntu user #3023 .
Nick sur IRC : naji.
Pensez à adhérer au Comité de lutte contre le SMS.
Hors ligne