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
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
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
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
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
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
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.
Au pire fais voir ton code.
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");
}
#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");
}
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
24 mars 2009 à 19:49
C'est un double | , chez moi ça marche avec ça...
Edit : Ah bah nan ça marche pô ^^
Edit : Ah bah nan ça marche pô ^^
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
24 mars 2009 à 20:53
Salut,
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
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
while((var1>0)||(var2>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
25 mars 2009 à 16:53
Les parenthèses sont inutiles autour des conditions sont inutiles ;-)).
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
25 mars 2009 à 19:22
Etait-il utile de le répéter deux fois ?
;-)
;-)
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
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 ;-)
Oui.
La 1ère fois c'est pour les parenthèses à gauche de ||, la 2ème fois pour celles à droite ;-)
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
25 mars 2009 à 20:10
Exactement :d. Heureusement qu'il n'y avait pas de boucles for ^^.