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. 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 ^^.
  2. 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. C'est un double | , chez moi ça marche avec ça...
      Edit : Ah bah nan ça marche pô ^^
      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. 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. 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