Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#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

Haut de page ↑