Pb while en c

huricane -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  2. Sh@tter Messages postés 157 Date d'inscription   Statut Membre Dernière intervention   46
     
    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
  3. huricane
     
    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. Apache
       
      if (salameche <= 0 || pikachu<= 0)

      Essaye ca
      0
  4. Sh@tter Messages postés 157 Date d'inscription   Statut Membre Dernière intervention   46
     
    C'est un double | , chez moi ça marche avec ça...
    Edit : Ah bah nan ça marche pô ^^
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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
  7. diop5
     
    while((var1>0)||(var2>0))
    {...........
    }
    0
    1. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Les parenthèses sont inutiles autour des conditions sont inutiles ;-)).
      0
      1. loupius > fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Etait-il utile de le répéter deux fois ?
        ;-)
        0
      2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > loupius
         
        Salut,

        Oui.
        La 1ère fois c'est pour les parenthèses à gauche de ||, la 2ème fois pour celles à droite ;-)
        0
      3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
         
        Exactement :d. Heureusement qu'il n'y avait pas de boucles for ^^.
        0