Pb while en c

Fermé
huricane - 24 mars 2009 à 19:23
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 25 mars 2009 à 20:10
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

6 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 mars 2009 à 19:34
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
Sh@tter Messages postés 157 Date d'inscription jeudi 29 novembre 2007 Statut Membre Dernière intervention 26 octobre 2009 46
24 mars 2009 à 19:35
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
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
if (salameche <= 0 || pikachu<= 0)

Essaye ca
0
Sh@tter Messages postés 157 Date d'inscription jeudi 29 novembre 2007 Statut Membre Dernière intervention 26 octobre 2009 46
24 mars 2009 à 19:49
C'est un double | , chez moi ça marche avec ça...
Edit : Ah bah nan ça marche pô ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
24 mars 2009 à 20:53
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
while((var1>0)||(var2>0))
{...........
}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 mars 2009 à 16:53
Les parenthèses sont inutiles autour des conditions sont inutiles ;-)).
0
loupius > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
25 mars 2009 à 19:22
Etait-il utile de le répéter deux fois ?
;-)
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569 > loupius
25 mars 2009 à 19:24
Salut,

Oui.
La 1ère fois c'est pour les parenthèses à gauche de ||, la 2ème fois pour celles à droite ;-)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
25 mars 2009 à 20:10
Exactement :d. Heureusement qu'il n'y avait pas de boucles for ^^.
0