<![CDATA[Forum Ubuntu-fr.org / [C++] Debutant condition[resolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?id=37771 Tue, 02 May 2006 16:27:52 +0000 FluxBB <![CDATA[Réponse à : [C++] Debutant condition[resolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=282770#p282770 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;
}
]]>
Tue, 02 May 2006 16:27:52 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=282770#p282770
<![CDATA[Réponse à : [C++] Debutant condition[resolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=279854#p279854 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é.

]]>
Sat, 29 Apr 2006 17:45:51 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=279854#p279854
<![CDATA[Réponse à : [C++] Debutant condition[resolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=279797#p279797
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 tongue

En fait tuveux faire une action une fois sur deux non ?

]]>
Sat, 29 Apr 2006 17:03:38 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=279797#p279797
<![CDATA[Réponse à : [C++] Debutant condition[resolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=279764#p279764 jette un oeil ici : http://ltiwww.epfl.ch/Cxx/c1_3.html

]]>
Sat, 29 Apr 2006 16:38:38 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=279764#p279764
<![CDATA[[C++] Debutant condition[resolu]]]> http://forum.ubuntu-fr.org/viewtopic.php?pid=279727#p279727 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

]]>
Sat, 29 Apr 2006 16:14:31 +0000 http://forum.ubuntu-fr.org/viewtopic.php?pid=279727#p279727