Boucle do while en langage C
Résolu/Fermé
thotoss
-
6 avril 2008 à 13:21
Emmanuel Delahaye Messages postés 107 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 17 juillet 2019 - 27 mai 2010 à 08:57
Emmanuel Delahaye Messages postés 107 Date d'inscription jeudi 18 juin 2009 Statut Membre Dernière intervention 17 juillet 2019 - 27 mai 2010 à 08:57
A voir également:
- Boucle do while en langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Boucle excel sans macro - Forum Excel
- Pascal langage - Télécharger - Édition & Programmation
- Xwxwxwxwv songs do 2023 ✓ - Forum Audio
3 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
6 avril 2008 à 13:32
6 avril 2008 à 13:32
Salut,
fait voir ta fonction mot_valide
fait voir ta fonction mot_valide
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
6 avril 2008 à 15:08
6 avril 2008 à 15:08
Donne ton code complet, pour que je teste chez moi et je te dirai ce qui ne va pas.
Alors voici le code, le probleme c'est que je vais chercher dans des fichiers si le mot rentré existe, et vous n'avez pas ces fichiers...
Voici ma fonction (elle se repete pour un mot allant de 2 a 15 lettres je n'ai pas trouvé un moyen de la rendre plus courte) :
int mot_valide(int plateau[15][15], char mot[20], int direction, int coord_X, int coord_Y)
{
int longueur=strlen(mot)+1;
int existe=0; // indique si le mot existe dans le dico //
int i,j;
char mot_bis[longueur];
FILE * entree;
if (coord_X + longueur > 14 || coord_Y + longueur > 14)
{
printf("Le mot sort du plateau de jeu ! \n");
return 0;
}
else if (longueur==3)
{
entree=fopen("2_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==4)
{
entree=fopen("3_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==5)
{
entree=fopen("4_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==6)
{
entree=fopen("5_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==7)
{
entree=fopen("6_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==8)
{
entree=fopen("7_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==9)
{
entree=fopen("8_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==10)
{
entree=fopen("9_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==11)
{
entree=fopen("10_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==12)
{
entree=fopen("11_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==13)
{
entree=fopen("12_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==14)
{
entree=fopen("13_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==15)
{
entree=fopen("14_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==16)
{
entree=fopen("15_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
}
Et voici le programme principal :
main()
{
int mot_valide(int [15][15], char [20], int , int , int );
int plateau_de_jeu[15][15];
int i,j,coord_X,coord_Y,direction,valeur_mot;
char mot[20];
printf("Bonjour !\n ");
do
{
printf("Entrez votre mot :\n");
gets(mot);
printf("Choisir votre direction pour placer le mot : 0=>droite 1=>bas \n");
scanf("%d",&direction);
printf("Choisir l'abscice de la premiere lettre de votre mot : \n");
scanf("%d",&coord_X);
printf("Choisir l'ordonnee de la premiere lettre de votre mot : \n");
scanf("%d",&coord_Y);
mot_valide(plateau_de_jeu,mot,direction,coord_X ,coord_Y);
}
while (mot_valide(plateau_de_jeu,mot,direction,coord_X ,coord_Y)!=1);
}
Voici ma fonction (elle se repete pour un mot allant de 2 a 15 lettres je n'ai pas trouvé un moyen de la rendre plus courte) :
int mot_valide(int plateau[15][15], char mot[20], int direction, int coord_X, int coord_Y)
{
int longueur=strlen(mot)+1;
int existe=0; // indique si le mot existe dans le dico //
int i,j;
char mot_bis[longueur];
FILE * entree;
if (coord_X + longueur > 14 || coord_Y + longueur > 14)
{
printf("Le mot sort du plateau de jeu ! \n");
return 0;
}
else if (longueur==3)
{
entree=fopen("2_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==4)
{
entree=fopen("3_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==5)
{
entree=fopen("4_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==6)
{
entree=fopen("5_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==7)
{
entree=fopen("6_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==8)
{
entree=fopen("7_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==9)
{
entree=fopen("8_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==10)
{
entree=fopen("9_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==11)
{
entree=fopen("10_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==12)
{
entree=fopen("11_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==13)
{
entree=fopen("12_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==14)
{
entree=fopen("13_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==15)
{
entree=fopen("14_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==16)
{
entree=fopen("15_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
}
Et voici le programme principal :
main()
{
int mot_valide(int [15][15], char [20], int , int , int );
int plateau_de_jeu[15][15];
int i,j,coord_X,coord_Y,direction,valeur_mot;
char mot[20];
printf("Bonjour !\n ");
do
{
printf("Entrez votre mot :\n");
gets(mot);
printf("Choisir votre direction pour placer le mot : 0=>droite 1=>bas \n");
scanf("%d",&direction);
printf("Choisir l'abscice de la premiere lettre de votre mot : \n");
scanf("%d",&coord_X);
printf("Choisir l'ordonnee de la premiere lettre de votre mot : \n");
scanf("%d",&coord_Y);
mot_valide(plateau_de_jeu,mot,direction,coord_X ,coord_Y);
}
while (mot_valide(plateau_de_jeu,mot,direction,coord_X ,coord_Y)!=1);
}
Emmanuel Delahaye
Messages postés
107
Date d'inscription
jeudi 18 juin 2009
Statut
Membre
Dernière intervention
17 juillet 2019
7
27 mai 2010 à 08:57
27 mai 2010 à 08:57
Apprenez à utiliser les balises de code (icone [<>])
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
6 avril 2008 à 16:03
6 avril 2008 à 16:03
Salutations,
Sans vraiment regarder le code, le problème décrit ressemble à une entrée standard non vidée. Ce qui fait que la saisie du mot est satisfaite avec une ancienne entrée (probablement un retour chariot) et qu'elle devient non bloquante. C'est généralement gets et fgets qui pose ce type de soucis.
Je mets un petit lien, c'est peut-être bien ce genre de chose qu'il faut faire avant la saisie du mot. (Et des autres saisies aussi)
M.
PS:
Dans ce même lien il y a pourquoi préférer fgets à gets aussi ;-)
Sans vraiment regarder le code, le problème décrit ressemble à une entrée standard non vidée. Ce qui fait que la saisie du mot est satisfaite avec une ancienne entrée (probablement un retour chariot) et qu'elle devient non bloquante. C'est généralement gets et fgets qui pose ce type de soucis.
Je mets un petit lien, c'est peut-être bien ce genre de chose qu'il faut faire avant la saisie du mot. (Et des autres saisies aussi)
M.
PS:
Dans ce même lien il y a pourquoi préférer fgets à gets aussi ;-)
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
>
thotoss
7 avril 2008 à 12:14
7 avril 2008 à 12:14
On peut lui donner l'entrée standard en paramètre.
fgets( str, strSize, stdin );
Ca marche en vidant le buffer clavier ?
M.
fgets( str, strSize, stdin );
Ca marche en vidant le buffer clavier ?
M.
thotoss
>
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
7 avril 2008 à 12:24
7 avril 2008 à 12:24
yess sa marche en vidant le buffer !! merci bocoup !
6 avril 2008 à 13:42
merci de m'aider encore ! la fonction est celle que vous m'avez faites dans l'autre post ^^ et elle marche sans souci ... le probleme est qu'il me redemande bien un mot si le precedent n'était pas valide, mais il ne me laisse pas" le temps" pour l'ecrire et passe a la suite. Ma fonction marche , c(est une certitude ... voulez vous quand méme que je l'écrive ?
6 avril 2008 à 13:49
int mot_valide(int plateau[15][15], char mot[20], int direction, int coord_X, int coord_Y)
{
int longueur=strlen(mot)+1;
int existe=0; // indique si le mot existe dans le dico //
int i,j;
char mot_bis[longueur];
FILE * entree;
if (coord_X + longueur > 14 || coord_Y + longueur > 14)
{
printf("Le mot sort du plateau de jeu ! \n");
return 0;
}
else if (longueur==3)
{
entree=fopen("2_lettres.txt","r");
do
{
fscanf (entree,"%s",mot_bis);
if (strcmp(mot_bis,mot)==0)
{
existe=longueur-1;
return 1;
}
}
while (!feof(entree) && strcmp(mot_bis,mot)!=0);
if(!existe)
{
printf ("Le mot %s n'existe pas!\n",mot);
return 0;
}
}
else if (longueur==4)
.......
...
..
}
6 avril 2008 à 14:53