Problème de fin de boucle

Résolu/Fermé
Thedots Messages postés 2 Date d'inscription vendredi 17 juillet 2015 Statut Membre Dernière intervention 17 juillet 2015 - 17 juil. 2015 à 18:27
chris79 Messages postés 91 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 1 février 2016 - 20 juil. 2015 à 10:14
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 ..



1 réponse

Utilisateur anonyme
17 juil. 2015 à 18:40
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 vendredi 17 juillet 2015 Statut Membre Dernière intervention 17 juillet 2015
Modifié par Thedots le 17/07/2015 à 19:25
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 91 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 1 février 2016 25
20 juil. 2015 à 10:14
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