[C] Boucle while qui bug!

Boucle while qui bug! [C] - C - Programmation

Marsh Posté le 03-05-2007 à 18:54:41    

Bonjour à tous!
J'ai fait un programme tel que:
Si on tape sur la lettre O on recommence le programme
Si on tape sur la lettre N on continue
Or pour la lettre O cela fonctionne mais pour la lettre N non, mais j'ai quand même le décision=1  
Donc je pense que cela reste bloqué quelque part, mais je ne vois pas l'erreur :(
 
Merci a celui qui pourra m'éclairer :)

Code :
  1. do
  2. //for(i=0;i!=1;)
  3.       i=0;
  4.       do
  5.            { correct=toupper(fgetc(PC));
  6.            
  7.             switch(correct)
  8.                   {
  9.                   case 'O': {
  10.                             decision=0;
  11.                             i=1;
  12.                             }
  13.                   break;
  14.                   case 'N': {
  15.                             decision=1;
  16.                             fprintf(PC,"\n\r Non" );
  17.                             i=1;
  18.                             }
  19.                   break;
  20.                   default: { //erreur
  21.                            fprintf(PC,"\n\rTouche '%c' invalide",correct);
  22.                          
  23.                            }
  24.                   }
  25.            }while(i!=1);
  26. }while(decision!=1);


Message édité par timz le 03-05-2007 à 18:56:37
Reply

Marsh Posté le 03-05-2007 à 18:54:41   

Reply

Marsh Posté le 03-05-2007 à 19:04:19    

default break


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
Reply

Marsh Posté le 03-05-2007 à 19:18:13    

Arf.. quel con! Merci

Reply

Marsh Posté le 03-05-2007 à 20:57:11    

correct doit être de type int.
Avant de faire quoi ce que ce soit avec le retour de fgetc, tu dois le comparer à EOF

Reply

Marsh Posté le 10-05-2007 à 18:15:29    

Le break n'a rien changé vu que default est le dernier déclaré donc il sortait obligatoirement de la boucle (je pense).
Correct est bien en int.
Eof, je ne connais pas je vais me renseigner!  
Merci

Message cité 1 fois
Message édité par timz le 10-05-2007 à 18:16:23
Reply

Marsh Posté le 10-05-2007 à 18:55:24    

timz a écrit :

Le break n'a rien changé vu que default est le dernier déclaré donc il sortait obligatoirement de la boucle (je pense).


Pas tout à fait. Le break te fait sortir de la première structure englobante qu'il rencontre à choisir parmi la boucle (for/while/do...while) ou le branchement multiple (switch). Ce dernier étant le plus proche, chaque break te fait sortir et aller directement au "while (i != 1)". Ensuite, que tu sortes ou pas du while dépend si i vaut 1 ou pas...
 

timz a écrit :

Eof, je ne connais pas je vais me renseigner!


EOF est une valeur particulière (aujourd'hui elle est définie à -1 mais ça peut changer) que renvoie la fonction "fgetc()" quand elle lit un flux qui est vide (fin de fichier, clavier vide, etc). Ce que dit Taz, c'est qu'il faut d'abord récupérer le fgetc() et le comparer à EOF avant d'aller faire un toupper dessus
Ex:

if ((correct=fgetc(fp)) != EOF)
{
    switch(toupper(correct))
    {
          <...>
    }
}
else
{
    <... traitement du cas où fgetc() a renvoyé "EOF" ...>
}


 
PS: pas besoin de mettre des accolades dans les case. Le début du code est défini par le mot "case" et la fin par le mot "break" ou l'accolade fermant le switch si aucun break n'est rencontré. D'ailleurs, si tu regardes bien la structure de l'instruction "case", tu remarqueras le ":" significatif d'un label. En fait, le switch/case n'est qu'un "goto" masqué...


Message édité par Sve@r le 10-05-2007 à 18:57:14

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Sujets relatifs:

Leave a Replay

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