Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1022 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Boucle while qui bug!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Boucle while qui bug!

n°1553365
timz
Posté le 03-05-2007 à 18:54:41  profilanswer
 

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
mood
Publicité
Posté le 03-05-2007 à 18:54:41  profilanswer
 

n°1553370
zecrazytux
Posté le 03-05-2007 à 19:04:19  profilanswer
 

default break


---------------
Blog photo/récits activités en montagne http://planetcaravan.net
n°1553379
timz
Posté le 03-05-2007 à 19:18:13  profilanswer
 

Arf.. quel con! Merci

n°1553411
Taz
bisounours-codeur
Posté le 03-05-2007 à 20:57:11  profilanswer
 

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

n°1558372
timz
Posté le 10-05-2007 à 18:15:29  profilanswer
 

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
n°1558406
Sve@r
Posté le 10-05-2007 à 18:55:24  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Boucle while qui bug!

 

Sujets relatifs
[Résolu]Boucle et lecture de fichiers...Probléme avec une boucle for
[Bash] choisir une ligne d'un fichier avec une boucle selectpblm de boucle
erreur de boucle with ? [résolu]boucle + evenement + incrementer [NOOB]
appel des threads dans une boucle whilefaire une boucle correcte... grand débutant
[SQL]Probeme $resultat et while 
Plus de sujets relatifs à : [C] Boucle while qui bug!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR