Problème de boucle

Fermé
gl111 Messages postés 4 Date d'inscription dimanche 30 octobre 2016 Statut Membre Dernière intervention 10 novembre 2016 - Modifié par baladur13 le 10/11/2016 à 16:15
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 11 nov. 2016 à 18:21
Bonjour j'ai écrit ce code :

using namespace std; 


enum class Etapes {ETAT_INITIAL, LECTURE_PREMIER_NOMBRE, FIN_LECTURE, LECTURE_NOMBRE_SUIVANT}; 

int premier,second,conversionChar,k(1),z(1),h;

int main() { 

   
    int etat(0);
    char next;
    bool fin(false);


  
    
    cout << "Enter a line of input:\n";
    cin.get(next);

while (!fin)
{     
    
   switch ((Etapes) (etat)) { 

            case Etapes::ETAT_INITIAL : {
               if(isspace(next)){break;}
               else {etat = 1;}
            } 
            
            case Etapes::LECTURE_PREMIER_NOMBRE : {
       
              if( next == '\n'){fin=true; break;}
              
              if(isspace(next)){
                  h=second;
                  cout<<h<<" ";
                  etat=2;
                  }
                    second = second *10;
                    conversionChar = (int) next - 48; 
                    second += conversionChar;
                    break;      
            }
            
            case Etapes::FIN_LECTURE : {
               
             if( next == '\n'){fin=true;}
               
                if(isspace(next)){break;}
              
               etat = 3; 
            }
            
            case Etapes::LECTURE_NOMBRE_SUIVANT : {          
                   //  if( next == '\n'){fin=true;}
                     
                    while(not isspace(next)){
                    premier = premier *10;
                    conversionChar = (int) next - 48; 
                    premier += conversionChar;
                    cin.get(next);
                    }
                    cout<<premier<<" ";
                    premier=0;
                    etat = 2;
                    break;
            }
             default : fin=true;       
         }   
    cin.get(next);
}
    
    system("PAUSE");

    return EXIT_SUCCESS; 
} 




le problème avec ce code quand je l’exécute, je peux rentrer ma chaîne de caractère mais une fois que le code m'affiche le résultat qui est correct il devrait m'afficher " Press [ENTER] to close the terminal... " mais il me l'affiche pas et je comprends pas pourquoi!
Si quelqu'un à une idée ca serait super cool!!
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

1 réponse

Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
11 nov. 2016 à 18:21
Bonjour,

Si le but est d'écrire l'extraction de 2 nombres de la manière la plus compliquée possible, tu as réussi car la relecture de ce code est quasi-impossible.
Les enum sont faits pour améliorer la lisibilité et non l'inverse.
Tu as dû utiliser un debuggeur pour écrire cela, en examinant la variable fin elle reste toujours à false, donc on ne sort pas de la boucle.
Entre les labels de switch, il faut mettre des break à moins d'être un expert. Penses-y.
J'aurai écris un code plus court
int main()
{
   int premier, second;
   std::cout << "Enter a line of input:\n";
   std::cin >> premier >> second;
   std::cout << premier << " " << second;
}
0