Problème de fin de boucle

Résolu
Thedots Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
chris79 Messages postés 97 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, il n'y a pas longtemps j'ai commencé à apprendre à programmer en C, et j'ai donc essayé un programme, mais je rencontre un problème, j'essaie de terminer mon programme en donnant une valeur à ma variable, mais j'ai l'impression de faire une erreur, et du coup j'aimerais vous poser la question.
L'erreur je pense, se trouve vers la fin. Voici mon code source :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int reset = 1;

do
{

int play_again = 1, difficult_level = 0;
printf("Quel niveau de difficulte voulez-vous ?\n");
printf("1. De 1 a 100 ?\n");
printf("2. De 1 a 1 000? \n");
printf("3. de 1 a 10 000?\n");
scanf("%d", &difficult_level);

do
{


int nombreMystere = 0, nombreEntree = 0, nombre_de_coup = 1, nombre_maximum = 1;
const int MIN = 1;


if (difficult_level != 1 && difficult_level != 2 && difficult_level != 3)
{
printf("Veuillez entrer 1, 2 ou 3 pour commencer a jouer.\n");
do
{
printf("Quel niveau de difficulte voulez-vous ?\n");
printf("1. De 1 a 100 ?\n");
printf("2. De 1 a 1 000? \n");
printf("3. de 1 a 10 000?\n");
scanf("%d", &difficult_level);
}while (difficult_level != 1 && difficult_level != 2 && difficult_level != 3);
}
else if (difficult_level == 1)
{
nombre_maximum *= 100;
}
else if (difficult_level == 2)
{
nombre_maximum *= 1000;
}
else
{
nombre_maximum *= 10000;
}


srand(time(NULL));
nombreMystere = (rand() % (nombre_maximum - MIN + 1)) + MIN;

do
{
printf("Quel est le nombre ?\n");
scanf("%d", &nombreEntree);
if(nombreEntree >nombre_maximum)
{
printf("Veuillez entrer un nombre inferieur ou egal a %d\n", nombre_maximum);
nombre_de_coup++;
}
else if (nombreEntree < nombreMystere)
{
printf("C'est plus !\n");
nombre_de_coup++;
}
else if (nombreEntree > nombreMystere)
{
printf("C'est moins !\n");
nombre_de_coup++;
}
else
{
printf("Vous avez trouve en %d fois,\n", nombre_de_coup);
if (nombre_de_coup>100)
{
printf("T'es vraiment nul !\n");
}
else if (nombre_de_coup>50)
{
printf("Tu dois t'ameliorer !\n");
}
else if (nombre_de_coup>20)
{
printf("T'es pas mauvais .. \n");
}
else if (nombre_de_coup>5)
{
printf("Tu te debrouilles vraiment bien !\n");
}
else
{
printf("Genius !\n");
}
printf("Do you want to play again ?\n");
printf("0. No\n");
printf("1. Yes\n");
scanf("%d", &play_again);
if (play_again = 0)
{
int reset = 2 ;
}
else
{

}
}

}while (nombreEntree != nombreMystere);



}while (play_again != 0);


}while (reset != 2);

}
Quand j'essaie de donner 0 à ma valeur play_again via "scanf", pour ensuite via ma condition "if" donner la valeur 2 à reset, le programme ne se termine pas, et ça fait à peu près 3h que je cherche tout seul, et un peu sur le net, mais je ne trouve pas, si quelqu'un pouvait m'aider s'il vous plaît, je lui en serai vraiment reconnaissant ..



A voir également:

1 réponse

Utilisateur anonyme
 
Bonjour

Quand tu écris
if (play_again = 0) 
, tu ne fais pas un test d'égalité, tu fais une affectation, c'est à dire que tu donnes à play_again la valeur 0.
Pour faire une comparaison, il faut utiliser == :
https://fr.wikiversity.org/wiki/Langage_C%2B%2B/Op%C3%A9rateurs#Comparateur_d.27.C3.A9galit.C3.A9_.22.3D.3D.22
0
Thedots Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir, tout d'abord merci pour cette réponse vraiment rapide.
Et ensuite, j'avais déjà essayé, un message d'erreur s'était affiché comme quoi une virgule, ou un point virgule était requis avant ")", je vais donc ré-essayé, merci.
Edit : Eh bien merci, je viens de finir mon programme grâce à ça, et 2 3 autres trucs, ça m'a énormément aider, encore merci !
0
chris79 Messages postés 97 Date d'inscription   Statut Membre Dernière intervention   25
 
Salut Thedots,

Une bonne pratique pour éviter ce problème est de prendre l'habitude d'inverser l'intérieur de ta condition :
if (0 == play_again)

Ainsi, si tu fais une erreur de frappe ou d'inattention, une affectation sera impossible et tu obtiendras une erreur de compilation ;)
++
0