Probléme sur mon prog(c++)

Fermé
hasti - 20 juin 2005 à 19:13
mamiemando Messages postés 33432 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 décembre 2024 - 21 juin 2005 à 19:11
Bonjour,
Je viens de realiser un programme en c++ dont lequel l ordinateur va choisir au hazard un mot d' une liste et vous devez le determiner lettre par lettre .Si je pose que n est la taille de cette liste
vous avez 2*n tentatives pour determimer le mot exacte en donnat a chaque fois une lettre et l'ordinateur vous aidera en indiquant si cette lettre existe ou non et si elle existe il indique a chaque fois son emplacement .
exemple:
l'exécution doit etre comme suite :
votre mot est: ----.
Vous avez 8 tentatives.
1 tentative: a
exacte .votre mot maintenat est --a-.
2 tentative:b
Lettre inexistante.
Votre mot reste inchangé. --a-.
...
...
Mon problème est que si le programme me permetd'essayer une tentative alors l'autre tentative sera faite par elle meme et elle est tjs incorrecte .
exemple:
i tentative:o
exacte.Votre mot est...
( i+1) tentative: // C'est la mon problème
Lettre inexistante .Votre mot reste inchangé... //
(i+2) tentative: // Le programme fonctionne normallement
(i+3) tentative:// Retour au meme probleme

Je vais vous fournir mon code source et merci d'avance pour votre aide



#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
void main()
{
char liste[20][20]={"bonjour","hafed","stiti","salut","cavas","bien","merci","impecable","informatique","logique","facile","encyclopedi","commentcamarche","programme","algorithme","compaq","windows","fenetre","reseau","intelligence"};
int p,i,j,k,n,trouve,existe,tail=1,b,v;
char mot1[20],mot2[20],let;


srand(time(0));
v=rand()%20;

strcpy(mot1,liste[v]);
strcpy(mot2,liste[v]);
n=strlen(liste[v]);
printf("\n\n\n\t\t\tBien venu au jeu de DEVINETTE\n\n\n");
for(i=0;i<n;i++) mot2[i]='-';
printf("Votre mot est: ");
for(i=0;i<n;i++) printf("%c",mot2[i]);
p=2*n;

printf("\n\nEssayer de deviner!!!!Trouver a chaque tentative une bonne lettre.\nVous avez %i tentatives.\n\n",p);
i=1;trouve=0;

while(i<=p && trouve==0){
printf("\n%i tentative :",i);
scanf("%c",&let);
j=0; existe=0;

while((j<n) && (existe==0)){
if(mot1[j]==let) existe=1;
else j++;
}

if(existe==1){
printf("\nBravo!!!Bonne reponse\n");
mot2[j]=let;
printf("votre mot maintenant est :");
for(k=0;k<n;k++) printf("%c",mot2[k]);
tail+=1;
}
else{
printf("\nLettre inexistante!!!\nvotre mot reste encore inchange :");
for(k=0;k<n;k++) printf("%c",mot2[k]);
}

if(i==p){
if(tail==(p-1)){ trouve=1;
printf("\n\n\nBravo!!vous avez trouve la Bonne reponse en %i tentatives",i);
}
else{ trouve=1;
printf("\n\n\nC est fini!!!\nVous avez perdu\nLa bonne reponse est :");
printf("%s",liste[v]);
}

}
else{
if(tail==p) {printf("\n\n\nBravo!!!Vous avez trouve la bonne reponse en %i tantatives",i);
trouve=1;
}
else i++;


}
}
scanf("%i",&b);
}
A voir également:

3 réponses

mamiemando Messages postés 33432 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 décembre 2024 7 809
20 juin 2005 à 20:31
1) Bon déjà c'est du c pas du c++.
2) Ensuite ce serait mieux de poster le code entre les balises code pour avoir un semblant d'indentation.
3)Ce serait bien de faire des fonctions (pour débugger et relire c'est plus facile).
4) Tentative ;o) Pas "tantative" !!
5) Bienvenue !! Pas Bien venue
0
Je pense que je suis sur un forum de programmation et non plus sur un forum de langue Francaise.Ca sera mieu de voir mon algorithme au lieu de voir mon ecriture .
Rq1:Je suis assez grand pour me conseiller d etuliser des fonction, je sais bient ce qu je fais.
Rq2:Ne jouez pas le Grand savant,C'est bient en DEV C++
A propos avez vous la réponse?
0
MissZaza Messages postés 149 Date d'inscription samedi 22 janvier 2005 Statut Membre Dernière intervention 7 décembre 2005 33 > hasti
20 juin 2005 à 23:34
Salut hasti,

J'ai regardé ton prog et franchement au début je ne voyais pas ce qui déconnait...
Mais je pense avoir trouvé, remplaces
scanf("%c",&let);
par
gets(&let);

En fait, avec la fonction scanf, quand tu tapes sur Entrée après le caractère, le prog l'enregistre et considère cela comme un caractère.
Avec gets, le prog attend le retour chariot pour enregistrer le caractère.
A+.
0
hasti > hasti
21 juin 2005 à 09:58
Merci bien MissZaza,
maintenant ca fonctionne correctement.
0
Utilisateur anonyme
21 juin 2005 à 00:50
salut Hasti

tu m'as fais suer mon cochon lol

J'ai changer ceci et celà fonctionne, mais c'est pas encore celà:

(scanf("%c",&let); )

est à remplacé par celà:

(scanf("%s",&let); )

La réponse est en fait que tu n'as plus qu'un seul caractère mais bien une chaîne et si je me goure pas, il prendra le premier caractère
donc "ENTER" part aux oubliettes.

Il y a une meilleure façon de faire, il faut mettre un tout petit peu d'ordre et c'est bon comme du chocolat

Salut
Bxflash
0
mamiemando Messages postés 33432 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 décembre 2024 7 809
21 juin 2005 à 19:11
Il faut aussi qu'il alloue let sinon ca va faire une segfault...
char let[200];

Désolé d'avoir été un peu sec mais le français c'est important... même en informatique... Et si je t'ai dit de faire des fonctions c'est pas pour t'emmerder mais pour être lisible... Ca aussi c'est important...

Bonne chance ;o)
0