Programmation du jeu du devin en C (problème)

Résolu/Fermé
Utilisateur anonyme - 1 mars 2013 à 16:51
 Utilisateur anonyme - 1 mars 2013 à 22:50
Bonjour,

Je dois programmer le jeu du devin en C (trouver un chiffre entre 0 et 100 grâce à 10 propositions, à chaque proposition le jeu vous indique si c'est plus ou moins), le jeu marche correctement, j'ai tout terminé sauf que j'ai un petit problème : à la fin du jeu (gagné ou perdu) je dois afficher la liste des propositions effectuées dans un tableau mais mon programme affiche seulement la dernière proposition plusieurs fois dans ce tableau.

Voici mon code :

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int jeu()
{
srand(time(NULL));
int tab[10];
int i,n,a;
a=rand()%100+0;
printf("%d",a);

for(i=10;i>=1;i--)
{
printf("\n\nIl vous reste %d coups\n",i);


for(n=1;n<=1;n++)
{
printf("Entrez un nombre : ");
scanf("%d",&tab[n]);


if(tab[n]>a && i>1)
{
printf("C'est moins !");
}
if(tab[n]<a && i>1)
{
printf("C'est plus !");
}


if(i==1 && tab[n]!=a)
{
printf(" C'EST PERDU !");

printf("\n\nvoici vos propositions : ");

for(i>0;i<=10;i++)
{
printf(" %d ",tab[n]);
}
printf("\n\nla solution etait : %d",a);
return 0;
}

if(tab[n]==a && i>0)
{
printf("\n\n C'EST GAGNE !");

printf("\n\nvoici vos propositions : ");

for(i>0;i<=10;i++)
{
printf(" %d ",tab[n]);
}
return 0;
}

}
}

}
int main(void)
{
printf(" ***BIENVENUE DANS LE JEU DU DEVIN***");
jeu();
fflush(stdin);
getchar();
return 0;
}


Le problème se trouve ici :

printf("\n\nvoici vos propositions : ");

for(i>0;i<=10;i++)
{
printf(" %d ",tab[n]);
}

Merci.

A voir également:

3 réponses

chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 308
1 mars 2013 à 16:53
Bonjour,

normal qu'il t'affiche plusieurs fois la même proposition : tu fais une boucle sur i, et tu cherches à afficher tab[n]. donc quelle que soit la valeur de i, tu prends toujours le même indice dans le tableau.

Remplace tab[n] par tab[i].

Cordialement.
0
Utilisateur anonyme
1 mars 2013 à 16:58
Bonjour chossette9, merci de ta réponse, le problème c'est que i correspond au nombre d'essai restants et tab[n] correspond a ma proposition.
Quand je compile en faisant tab[i], le programme m'écrit nimporte quoi..
0
Utilisateur anonyme
1 mars 2013 à 17:05
Bien sûr puisque tu mets toujours ton résultat dans tab[n] et que ton n reste toujours égal à 1.
regarde ta boucle
for(n=1;n<=1;n++)


De plus, lors de l'affichage, l'initialisation de for est encore plus fantaisiste :
for(i>0;i<=10;i++)
0
Utilisateur anonyme
1 mars 2013 à 17:17
Ba en faite j'ai fais la boucle for(n=1;n<=1;n++) pour qu'à chaque coup on ne puisse taper qu'une seule proposition, par exemple si je fais for(n=1;n<=10;n++), pour chaque coup j'aurai droit à 10 propositions.
Ensuite j'ai fait la boucle for(i>0;i<=10;i++) pour que mon tableau affiche mes propositions en fonctions du nombre de coups effectués, par exemple si j'ai trouvé le bon chiffre en 5 coups, je ne veux pas que le programme m'affiche par exemple 10 propositions mais 5 propositions.
0
Utilisateur anonyme
1 mars 2013 à 17:42
Pourquoi mettre une boucle si tu ne veux pas boucler ? La boucle sert à recommencer un traitement plusieurs fois : si on ne veut le faire qu'une fois, c'est complètement inutile d'en mettre une !
Mais même si tu laisses cette boucle, tu es bien d'accord que n vaut toujours 1 ? Donc quand tu fais scanf("%d",&tab[n]); , tu lis toujours la valeur dans tab[1]. Pas la peine d'avoir un tableau si c'est pour toujours mettre dans la même case du tableau ! . En fait, c'est le 'n' qui ne colle pas, tu devrais avoir tab[i].

Deuxième point : ton affichage . Quand tu écris for(i>0;i<=10;i++), le i>0 est supposé initialiser i. Mais i>0, c'est une comparaison, ça n'initialise rien du tout !. D'ailleurs, comme tu as rempli ton tableau par indices décroissants, tu devrais aussi l'afficher par indices décroissants.
0
Utilisateur anonyme
1 mars 2013 à 18:16
A oui je comprend ce que tu veux dire mais je vois vraiment pas comment faire en faite, je confond i,n et tab [n]..
0
Utilisateur anonyme
1 mars 2013 à 18:33
J'ai compris ce qui n'allait pas mais ce que je ne comprend c'est pourquoi le programme ne m'enregistre que la dernière proposition.

par exemple quand je fais
for(k=10;k>=1;k--)
{
printf(" %d ",tab[k]=n);
}
il m'affiche 10 fois la dernière proposition.
0
Utilisateur anonyme
1 mars 2013 à 20:44
C'est tab[k] qu'il faut afficher, pas tab[k]=n. Tu as une idée de la valeur de tab[k]=n ?
0