Probléme sur mon prog(c++)
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);
}
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:
- Probléme sur mon prog(c++)
- Robot prog - Télécharger - Édition & Programmation
- Clear prog - Télécharger - Sécurité
- Prog dvb - Télécharger - Télévision
- Aide pr premier pas en prog ✓ - Forum Programmation
- Pb advpack.dll lors d'installation de prog - Forum Windows
3 réponses
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
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
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
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
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)
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)
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?
J'ai regardé ton prog et franchement au début je ne voyais pas ce qui déconnait...
Mais je pense avoir trouvé, remplaces
par
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+.
maintenant ca fonctionne correctement.