probléme avec un progr

probléme avec un progr - C - Programmation

Marsh Posté le 15-05-2006 à 20:01:14    

Bonjour a tous,
voila j'ai un probléme avec mon programme, vous pouvez voir le code source la ==>  http://home.scarlet.be/kio/
 
le probléme est dans la fonction "commencer", tout ce passe bien jusqu'au teste de la reponse du joueur...quand je lance le programme, j'entre la reponse mais il revient au début...avez vous une solution? merci

Reply

Marsh Posté le 15-05-2006 à 20:01:14   

Reply

Marsh Posté le 15-05-2006 à 20:03:22    

pose toi les bonnes questions:
- quelles sont tes variables en jeu à ce moment ?
- quelles sont leurs valeurs respectives ?


---------------
Töp of the plöp
Reply

Marsh Posté le 15-05-2006 à 21:10:21    

Plusieurs remarques, certaines mineures, d'autres moins, en vrac :
 

#define nocurseur _setcursortype(_NOCURSOR)
#define curseur _setcursortype(_NORMALCURSOR)
#define solide _setcursortype(_SOLIDCURSOR)
#define champ textbackground(CYAN)
#define champnormal textbackground(BLUE)


 
Les identifiants débutant par un underscore (car. _ ) sont réservés.
Il est donc déconseillé de les utiliser, surtout en leur attribuant des noms pouvant potentiellement se retrouver dans un bon millier de bibliothèques différentes.
Une autre convention presque universellement utilisée, est celle disant que les macros sont en majuscules. Comme ça on sait qu'il s'agit d'une macro, et non d'une variable (ex : FILENAME_MAX dans stdio.h).
 
Evite également les mélanges français/anglais, déstabilisant. Ca paraît mineur, mais en fait ça ne l'est pas : lorsque tu as une bonne convention de nommage, le programme devient beaucoup plus lisible, et ça, c'est important.
 
Et à propos de lisibilité dans le code, par pitié, soigne tes indentations !
Certaines portions de ton code sont illisibles juste à cause de cela, on perd un temps précieux à déchiffrer !
 
 

struct joueur
{
       char nom[20],prenom[20];
       int age;
       long score;
};


 
Utilise plutôt :
typedef struct {
       char nom[20],prenom[20];
       int age;
       long score;
} joueur;
 
Ce qui te permettra d'utiliser le type "joueur" directement, plutôt que "struct joueur".
De même, pense mieux tes typages : un âge ne peut être négatif, donc unsigned semble plus indiqué. Et un nom de plus de vingt caractères, j'en connais plusieurs dans mon entourage. ;)
 

void main()


 
Surement pas.
main() a deux prototypes définis par la norme :
    int main(void);
et
    int main (int, char**);
 
La fonction main() doit obligatoirement retourner un entier (le code retour du programme, idéalement zéro pour indiquer que tout s'est bien déroulé).
Si ton compilateur l'accepte (et s'il est bien réglé, il devrait néanmoins émettre un warning), alors il ajoute pour toi un retour à zéro.
Deux constantes sont définies par la norme, afin de standardiser tout ça, dans stdlib.h : EXIT_SUCCESS et EXIT_FAILURE.
 

         if (level==1) //commencer
             {
                        id(&info); //saisie des donnees du joueur
                        infojeux(); //information du deroulement de jeux
                        commencer(&info,&newquestion); //debut du jeux
             }
           if(level==2) //ajouter des questions
              {
                  question(&newquestion);
              }
           if(level==3)
               {
                       highscore();
               }


 
switch...case for teh win ! ;)
switch(level)
{
   case 1 :
      id(&info);
      ...
      break;
   case 2 :
      ...
      break;
   default :
      ...
}
 
 

char min[27]={'a','z','e','r','t','y','u','i','o','p','q','s','d','f','g','h','j','k','l','m','w','x','c','v','b','n',' '};


const char *min = "aertyuiopqsdfghjklmwxcvbn";
(je ne m'étendrais pas sur les choix douteux de l'algorithme :o )
 
 
 

Spoiler :

while(!feof(randomquestion) && sw==0)


Non.
feof() sert simplement à l'identification de la fin d'une lecture de flux. Elle ne sert pas à détecter une fin de lecture, pour cela, il faut tester le code retour des fonctions de lecture (dans ton cas, fread() ).
 

randomquestion=fopen("quest.duf","rb" );
if(randomquestion)


 
Comme ça, au pif et au hasard, je dirais : "mets un else avec un printf() d'erreur, parce que s'il n'ouvre pas le fichier, il reviendra au début sans rien te dire".
Ce qui, bizarrement, est le symtome de ton problème. [:klem3i1]
(ton fichier est-il trouvé par le programme ? y a-t-il les droits de lecture, etc ?)
 
 
Bref, il manque aussi une bonne gestion d'erreur à ton code source.
 
 
Dans l'ensemble il reste énormément de choses à dire, mais cela demandrait beaucoup de temps de décortiquer intégralement ton programme pour t'expliquer tes erreurs. Temps nécessaire principalement par le côté fouilli du dit programme, mais bon, on a tous commencé par ce genre d'horreur (ne le prend pas mal, si je te montrais mes premiers codes sources... ;) )

Reply

Marsh Posté le 16-05-2006 à 10:46:57    

Merci beaucoup pour tes explications, je reconnais que le code est pas tres bien présenté et qu'il n'est pas facile a lire...mais je suis débutant et je n'ai pas bcp de temps pour faire ce programme...mais j'avoue que je galére qd mm...dans mon programme, qd je débute le jeu, il affiche la premiere question mais il ne passe jms a la question suivante....mais je ne sais pas si TOUTES les question sont inscrite dans le fichier "qusetion.duf" ou si le probléme est dans la fonction commencer....

Reply

Marsh Posté le 16-05-2006 à 12:43:44    

c'est bon j'ai trouvé la solution ^^

Reply

Marsh Posté le 16-05-2006 à 22:02:15    

c'était quoi ?


---------------
Töp of the plöp
Reply

Marsh Posté le 17-05-2006 à 09:51:57    

Elmoricq a écrit :

Plusieurs remarques, certaines mineures, d'autres moins, en vrac :
 

#define nocurseur _setcursortype(_NOCURSOR)
#define curseur _setcursortype(_NORMALCURSOR)
#define solide _setcursortype(_SOLIDCURSOR)
#define champ textbackground(CYAN)
#define champnormal textbackground(BLUE)


 
Les identifiants débutant par un underscore (car. _ ) sont réservés.


Et ? Ces identificateurs (_setcursortype, _NOCURSOR etc.) sont fournis par l'implémentation (conio en l'occurence, je suppose). Il n'y a pas le choix. Par contre, ceux de l'utilisateur (nocurseur, curseur etc.) sont tout à fait corrects.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 17-05-2006 à 10:06:46    

Pas fait gaffe qu'il ne s'agissait pas de fonctions à lui, et je ne connais pas conio non plus.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed