Donc voila je dois faire un programme qui dois nous faire deviner au bout de 10 essai un nombre aléatoire compris entre 1 et 100. Si au bout des 10 essais, le joueur n´a pas trouvé, l´ordi lui indique la solution, j´ai donc fais ce programme qui marche sauf que au bout des 10 essai sa recommence et je vois pas comment indiquer au joueur qu´il a perdu.
Merci de votre aide
int main()
{
int n;
int i, s, X;
X=time(NULL);
srand(X);
n=rand()%100+1;
do{
printf("Le nombre a trouver est %d\n", n);
for (s = 1; s <= 10; s++)
{
printf("Entrer votre nombre: \n");
scanf("%d",&i);
if (i>n){
printf("Trop grand\n");
}
else{
if (i<n){
printf("Trop petit\n");
}
else{
printf("juste!\n");
}
}
}
}while (i!=n);
system("pause");
return 0;
}
simple, tu comptes les essais.
tu peux par ex. comptabiliser le nombre de fois (d´entrées) que l´utilisateur a fait, ou tout simplement faire un int "score" et faire +1 à cet entier à chaque imp.
code :
int entier
//du code...
if (i>n){
score++;
printf("Trop grand\n");
}
else{
if (i<n){
score++;
printf("Trop petit\n");
}
else{
score++;
printf("juste!\n");
}
if(score==10){
printf("Perdu, essayes encore naab !\ n");
score==0;
goto fonction_de_depart // = fonction externe au main qui relance le main ou tout simplement le main direct
}
}
}while (i!=n);
c´est assez simple ^^ tu débutes en C ?
Ok merci oui je débute en C mais y´aurais pas moyen d´utiliser une boucle plutot que d´incrémenter de 1 a chaque fois?
ah ca je crois que oui ^^
ce serait pas plutot pour un devoir?
"fonction externe au main qui relance le main"
Ca ne veut rien dire "relancer le main", le seul moyen de faire ça, c´est de relancer le programme. Je te conseille aussi de factoriser tes expressions, puisque tu as trois expressions et que dans chacune d´elle tu as "score++", autant mettre une seule fois score++ à la fin de la boucle, tu y gagnes en lisibilité et en vitesse (ici non mais imagine des boucles où tu dois modifier des centaines de valeur, tu ne vas pas réécrire la même chose dix fois, ce serait idiot).
Essaie d´éviter aussi le goto si tu veux pas te faire taper sur les doigts... ^^
Pour Okami, à vrai dire je vois pas la différence, "incrémenter de 1 à chaque fois" nécessite une boucle, donc pourquoi vouloir te passer de l´incrémentation pour mettre une boucle ? Un autre conseil, quand le joueur aura trouvé la solution exacte, il ne sert à rien que la boucle continue, utilise un booléen qui prendra la valeur true lorsque l´utilisateur aura trouvé.
Voilà l´équivalent en code :
main {
int essais;
int trouve;
[...]
essais = 0;
trouve = 0;
do
{
scanf(...);
if (i < n) {
... }
else if (i > n) {
... }
else {
...
trouve = 1;}
essais++;
} while (essais < 10 && !t rouve)
Au cas où tu ne comprennes pas encore bien les expressions booléennes, je t´explique la condition du while, en fait il va tester deux choses :
1°) Il regarde si essais est inférieur à 10, si c´est vrai, ton ordinateur va "noter" la valeur 1 (logique booléenne : 1 (true) ou 0 (false)).
2°) Il regarde si trouve est true, si trouve est false, !t rouve est true, donc à partir du moment ou trouve sera true, !t rouve sera false et la condition ne sera pas remplie car 1 && 0 = 0 (table de vérité ET). Petit détail qui peut avoir son importance, si l´opérande de gauche est fausse dans l´expression a && b, b n´est pas testé (du moment que a est false, a && b sera forcément false).
oui mais la il ne suffit que de 3 petites incrementations, ce n´est rien de bien grave ^^´
bin je voulais par là dire relancer le programme oui si tu ne comprends pas faut un peu reflechir sur quoi ca veut dire ^^´
J´avais très bien compris ce que tu avais voulu dire, mais la programmation est un domaine qui exige un minimum de rigueur ![]()
bah, inutile de rechercher le maximum pour un petit hello world par exemple, si on peut faire simple on fait simple ^^
bon je mets fin à cette discussion ^^ ![]()
ok j´ai compris sa mais avec un for on peux pas le faire autrement?
avec une boucle for sa doit etre possible non?
Et si tu essayais avant d´attendre patiemment qu´on te réponde ?
j´essayais en haut mais comme je l´ai dit j´ai un problème car au bout des 10 essai sa recommence et je vois pas comment indiquer au joueur qu´il a perdu.
do{
printf("Le nombre a trouver est %d\n", n);
for (s = 1; s <= 10; s++)
{
printf("Entrer votre nombre: \n");
scanf("%d",&i);
if (i>n){
printf("Trop grand\n");
}
else{
if (i<n){
printf("Trop petit\n");
}
else{
printf("juste!\n");
s=10; //(le joueur a gagné donc on sort de la boucle)
}
if(s==10 && i!=n)
{
printf("vous avez echoué");//le joueur est arrive au bout et n´a pas trouve le bon numero
}
}
int rejouer;
printf("Rejouer!(oui tapez 1 non tapez 2");
scanf(rejouer)
}while (rejouer==1 && s);
bug celui la est mieux
do{
printf("Le nombre a trouver est %d\n", n);
for (s = 1; s <= 10; s++)
{
printf("Entrer votre nombre: \n");
scanf("%d",&i);
if (i>n){
printf("Trop grand\n");
}
else{
if (i<n){
printf("Trop petit\n");
}
else{
printf("juste!\n");
s=10; //(le joueur a gagné donc on sort de la boucle)
}
if(s==10 && i!=n)
{
printf("vous avez echoué");//le joueur est arrive au bout et n´a pas trouve le bon numero
}
}
int rejouer;
printf("Rejouer!(oui tapez 1 non tapez 2");
scanf(rejouer)
}while (rejouer==1);
Merci Neoknight mais ya encore un problème il n´affiche pa tout le temps vous avez echoué quand on a fais 10 tentative sans succés why?
Non c´est bon c´était juste un pb d´accolade merci de ton aide Neoknight bonne soirée
using namespace std;
int main(int argc, char *argv[])
{
int rejouer;
do{
int n=5,i;
for (int s = 1; s <= 10; s++)
{
printf("Entrer votre nombre: \n");
scanf("%d",&i);
if (i>n){
printf("Trop grand\n");
}
else
if (i<n){
printf("Trop petit\n");
}
else
{
printf("juste!\n");
s=10; //(le joueur a gagné donc on sort de la boucle)
}
if(s==10 && i!=n)
{
printf("vous avez echoué");//le joueur est arrive au bout et n´a pas trouve le bon numero
}
}
printf("Rejouer!(oui tapez 1 non tapez 2");
scanf("%d",&rejouer);
}
while (rejouer==1);
system("PAUSE");
return EXIT_SUCCESS;
}
ah ok j´avais pas teste mon prog
de rien ![]()
pour ceux que sa interesse voila le prog final
int main(void)
{
int n;
int i, s, X;
X=time(NULL);
srand(X);
n=rand()%100+1;
printf("Le nombre a trouver est %d\n", n);
for (s = 1; s <= 10; s++)
{
printf("Entrer votre nombre: \n");
scanf("%d",&i);
if (i>n){
printf("Trop grand\n");
}
else{
if (i<n){
printf("Trop petit\n");
}
else{
printf("juste!\n");
}
}
if(s==10 && i!=n)
{
printf("Tentative depassee, le nombre a trouver etait %d\n", n);
}
}
system("pause");
return 0;
}
Ben sinon ...
http://www.siteduzero.com