Pb while en c

Bonjour,
j 'ai un petit probleme en C,
j'essai de cree une boucle de type: while ( var1 >0 OU var2 > 0 ){.......}

Et le "ou" me bloque , jai essayer de mettre ||, | et ca ne marche pas...
Quand je met une seul condition la boucle marche niquel, et quand il y a les 2 (avec || au milieu) la boucle continue a l'infinit.
Bon je viens de commancer le C donc c peut etre ultra simple^^

merci
Configuration: Windows Vista
Firefox 3.0.7

6 réponses

  1. Contributeur
    Salut,
    Peut-être tout simplement que tu as mis une mauvaise condition. ;-)).
    Sinon l'opérateur OU en C, est bien || (double barre). L'opérateur | (simple barre) est utilisée pour le OU bit à bit.
    Poste ton exemple de boucle infinie qu'on puisse voir ce qui ne va pas.
    Cdlt
    0
    1. L'opérateur logique du OU en C est bien || , donc le problème doit plutôt venir de l'intérieur de ta boucle, au niveau de ton algo'

      Au pire fais voir ton code.
      0
      1. Voila mon super programe de console de combar pokemon ^^

        #include <stdio.h>
        #include <stdlib.h>
        #include <time.h>

        int main(int argc, char *argv[])
        {
        //les pv
        long pikachu = 100;
        long salameche = 100;

        //variable des attaque
        long attaque = 1;
        long attaque1 = 0;

        //aleatoire, et min max attaque pour les attaque
        const long MAX = 100, MIN = 1;

        srand(time(NULL));

        printf("Tu est un dresseur de pokemon ,et par ambition tu veut devenir le plus grand de tous!!!!!!!!ton premier pokemon est pikachu: un petit pokemon jaune\n");

        printf("ton pokemon a %ld point de vie et possede 4 attaque diferrente!\n",pikachu);
        system("PAUSE\n");
        printf("pikachu ce fait attaquer!!!! par un pokemon de feu : salameche et il te surprend donc tu perd 3 pv\n");
        pikachu-=3;
        printf("pika a %ld pv\nsalameche a %ld\n",pikachu,salameche);
        system("PAUSE\n");

        while ( salameche!=0 | pikachu!=0)
        {
        printf("Tu peut riposter\n 1:Vive-Attaque (attaque qui ne fait pas beacoup de degats...) \n 2:coup de tete (fait moyennement des degat) \n 3:Tonnerre (fait pas mal de degat mais ca peut rater) \n 4:Fatal-Foudre (tout ou rien) \n");
        scanf("%ld", &attaque);

        switch (attaque)
        {
        case 1:
        printf("Vive attaque \n");
        attaque1 = (rand() % (30 - 20 + 1)) + 1;
        break;
        case 2:
        printf("Coup de tete \n");
        attaque1 = (rand() % (40 - 30 + 1)) + 1;
        break;
        case 3:
        printf("Tonnerre \n");
        attaque1 = (rand() % (60 - 20 + 1)) + MIN;
        break;
        case 4:
        printf("Fatal-Foudre \n");
        attaque1 = (rand() % (100 - 0 + 1)) + MIN;
        break;
        default:
        printf("ta louper ton attaque, boulet\n");
        attaque1=0;
        break;
        }

        salameche = salameche - attaque1;

        if (salameche <0 || pikachu<0) //le pb
        {
        salameche=0;
        }
        if (pikachu <0)
        {
        pikachu=0;
        }

        printf("salamche perd %ld pv il est donc a %ld pv\n",attaque1,salameche);
        system("PAUSE\n");
        attaque1 = (rand() % (60 - 20 + 1)) + MIN;
        pikachu= pikachu -attaque1;
        printf("salamche t'attaque,il te fait perdre %ld donc pikachu a encore %ld pv\n",attaque1,pikachu);
        system("PAUSE\n");
        }
        if (salameche=0){
        printf("salameche est donc mort , tu a gagner\n" );
        }
        else {
        printf("tu a perdut....\n");
        }
        system("PAUSE\n");
        }
        0
        1. if (salameche <= 0 || pikachu<= 0)

          Essaye ca
          0
      2. C'est un double | , chez moi ça marche avec ça...
        Edit : Ah bah nan ça marche pô ^^
        0
        1. Contributeur
          Salut,
                  if (salameche <0 || pikachu<0) //le pb 
                  {
                      salameche=0;
                  }
                  if (pikachu <0)
                  {
                      pikachu=0;
                  }
          

          Ca ne serait pas plutôt if (salameche <0)
          Si salameche est négatif alors, on l'affecte à 0.

          Ca ne serait pas while ( salameche!=0 && pikachu!=0) ?
          Tant que les deux ont encore de la vie, on continue le jeu ?

          if (salameche=0){
          Voilà une condition toujours fausse. Tu mets 0 dans salameche qui renvoie la valeur 0.
          Si tu veux comparer avec 0, il s'agit d'un double égal ==.

          De plus, tu as oublié de faire return 0 à la fin du programme.

          Cdlt
          0
          1. while((var1>0)||(var2>0))
            {...........
            }
            0
            1. Contributeur
              Les parenthèses sont inutiles autour des conditions sont inutiles ;-)).
              0
            2. @fiddyEtait-il utile de le répéter deux fois ?
              ;-)
              0
            3. Modérateur
              @loupiusSalut,

              Oui.
              La 1ère fois c'est pour les parenthèses à gauche de ||, la 2ème fois pour celles à droite ;-)
              0
            4. Contributeur
              @lami20jExactement :d. Heureusement qu'il n'y avait pas de boucles for ^^.
              0