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

  • Votes
  • Date
  • Date décroissante
  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
    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.
      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");
        }
        1. if (salameche <= 0 || pikachu<= 0)

          Essaye ca
      2. C'est un double | , chez moi ça marche avec ça...
        Edit : Ah bah nan ça marche pô ^^
        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
          1. while((var1>0)||(var2>0))
            {...........
            }
            1. Contributeur
              Les parenthèses sont inutiles autour des conditions sont inutiles ;-)).
            2. @fiddyEtait-il utile de le répéter deux fois ?
              ;-)
            3. Modérateur
              @loupiusSalut,

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