scons
Messages postés8Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention28 juin 2006
-
24 juin 2006 à 16:23
scons
Messages postés8Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention28 juin 2006
-
25 juin 2006 à 14:24
bon jour,
voila j'ai un probleme avec un programme en C
il s'agit du jeu du pendu.
tout me semble pourtant corect mais je pense que je dois a voir un probleme au niveau du choix et de l'ouverture de fichier texte ou sont stocker les mots a touver.
je poste ici la source de mon fichier en esperant que quelqu'un pourra me donner un coup de main.
int main()
{
int increment=0;
int increment2=0;
int sortie=1;
int fichier;
int caralu;
int ligne=1;
int hasard=0;
int vies=5;
int choix;
char cara[100];
char mot[15]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
char essai[15]="\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
char touche;
gotoxy(1,1);
printf("bienvenue dans le jeu du pendu\n");
gotoxy(1,2);
printf("jouer avec\n");
gotoxy(1,3);
printf("s:le sport\n");
gotoxy(1,4);
printf("n:la nature\n");
gotoxy(1,5);
scanf("%d",&choix);
printf("\n");
printf("\n");
switch(choix)
{
case 's': fichier=open("sport.txt",O_RDWR);
break;
case 'n': fichier=open("nature.txt",O_RDWR);
break;
};
while (hasard==0)
{
srand((unsigned)time(NULL));
hasard=rand() % MAX_MOTS;
}
// SI N'ARRIVE PAS A OUVRIR LE FICHIER
if (fichier==-1)
{
printf("Impossible d'ouvrir le fichier pendu.txt\n");
printf("verifiez qu'il est bien dans le meme\n");
printf("repertoire que l'executable.");
getch();
return 1;
}
caralu=read(fichier,cara,100); //LIT LE CONTENU DU FICHIER
//TANT QU'ON N'EST PAS AU NUMERO DE LIGNE
//EGAL A HASARD COMPTE LE NOMBRE DE LIGNE
while (hasard!=ligne)
{
if (cara[increment]=='\n') ligne++;
increment++;
}
//TANT QUE LA LIGNE N'EST PAS TERMINEE
while (cara[increment]!='\n')
{
mot[increment2]=cara[increment];
essai[increment2]='?';
increment2++;
increment++;
}
close(fichier); //REFERME LE FICHIER
while (sortie==1)
{
gotoxy(1,6);
printf("%s\n\n",essai);
gotoxy(1,7);
printf("Il reste %d vies",vies);
gotoxy(1,8);
printf("Appuyez sur une lettre ");
touche=getch();
if (touche==27) sortie=0; //SI ESCAPE QUITTE
/*SI C'EST UNE MAJUSCULE TRANSFORME EN MINUSCULE*/
if ((touche<=90)&&(touche>=65)) touche=touche+32;
/*SI UNE LETTRE A ETE PRESSEE*/
if ((touche<=122)&&(touche>=97))
{
increment2=0;
for (increment=0 ; increment<=14 ; increment++)
{
if (mot[increment]==touche)
{
if (essai[increment]==touche)
{
gotoxy(1,10);
printf("Vous avez deja trouve cette lettre ! ");
vies--;
}
else
{
gotoxy(1,10);
printf("Bravo ! Vous avez trouve la lettre %c ! ",touche);
essai[increment]=touche;
}
}
else increment2++;
}
if (increment2==increment)
{
gotoxy(1,10);
printf("Rate ! Cette lettre n'est pas dans le mot ! ");
vies--;
}
}
if (vies<0)
{
gotoxy(1,10);
printf("PERDU ! Vous n'avez pas trouve le mot !");
sortie=0;
getch();
}
increment2=0;
for (increment=0 ; increment<=14 ; increment++)
{
if (mot[increment]==essai[increment]) increment2++;
}
if (increment2==15)
{
gotoxy(1,10);
printf("BRAVO ! Vous avez trouve le mot ! vous avez gagne !");
gotoxy(1,6);
printf("%s",essai);
sortie=0;
getch();
}
}
}
merci de votre attention.
cs_eRoZion
Messages postés241Date d'inscriptionvendredi 23 mai 2003StatutMembreDernière intervention 8 octobre 20071 24 juin 2006 à 18:01
Salut,
j'ai pas le temps de regarder, je le ferai surement cette nuit si tu n'as pas trouvé mais à mon avis le problème vient du fait que tu compile en console 32 bits et que du coup il faudrait que tu redefinisse le repertoire de travail qui par defaut n'est pas celui de l'executable.
Essaie de placer les fichier sport.txt, nature.txt etc dans C:\sport.txt etc et remplace
case 's': fichier=open("sport.txt",O_RDWR);
par
case 's': fichier=open("c:\\sport.txt",O_RDWR);
etc
Si ca marche c'est ça sinon je regarderai plus tard comme je te l'ai dis plus haut.
ben92600
Messages postés56Date d'inscriptiondimanche 13 novembre 2005StatutMembreDernière intervention11 juillet 2006 24 juin 2006 à 19:59
pour moi il y a pas mal de chose qui pourais provoquer des erreur
- non verification de fin de chaine
- posibilite de tomber 2 fois d'affiller sur le mm mot (time(0)) mieux (time(0)*getpid)
-les goto j'aime pas c'est barbar mais bon sa depend des gents
-et tu peu aussi fait plusieur fonction sa aide a mieux savoir ou sa marche pas
- tu fait aussi un read de 100 mais qui te dit que ton fichier fera pas 500 fois plus
mais deja coupe test fonction sa sera un debut pour voir plus clair dans ton code tu sera ce qui foire et ce qui marche
scons
Messages postés8Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention28 juin 2006 24 juin 2006 à 20:14
merci pour vos reponse ca fait plaisir de voir des gens qui essaie de m'aider et je vous en suis tres reconnaissant.
erozion j'ai essayer comme tu me las dit de changer les fichier txt de repertoire mais ca ne change rien dans l'exectuion du programme.
le probleme doit donc bien s'effectuer au niveau du choix du fichier et de sa lecture.
je vais essyer de trouver le probleme mais si vous y arriver avant moi merci de m'en faire part.
merci a tous et bonne soirée.
ps:
ben92600 j'ai pas encore eu le temps de tout essayer , mais je m'y mettrais demain, en tout cas merci d'avoir repondu.
scons
Messages postés8Date d'inscriptionjeudi 23 octobre 2003StatutMembreDernière intervention28 juin 2006 25 juin 2006 à 14:17
bonjour,
merci pour vos reponses mais j'ai fini par resoudre mon probleme.
en fait il s'agissait d'une mauvaise definition de la variable "choix" qui provoquait une erreur lors de l'ouverture des fichiers.
donc voila desormais tout fonctionne.
merci a tous