Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 tongue

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