Probleme avec If et else [Résolu]

Signaler
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
6 avril 2009
-
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
Bonjours a tous voici un bout de code d'un convertisseur hexadecimal, octal, et decimal :

#include

int

CHIFRE;
int
choix;
int

main(void
)
{
   {
      std::system(
"cls");
        std::cout <<
"**********MENU**********" << std::endl;
        std::cout <<
"1 - Decimal > octal et hexadecimal." << std::endl;
        std::cout <<
"2 - Octal > decimal et hexadecimal." << std::endl;
        std::cout <<
"3 - Hexadecimal > octal et decimal." << std::endl;
        std::cout <<
"4 - Quitter." << std::endl;
   }
   {
      std::cout <<
"Entrez votre choix : ";
      std::cin >> choix;
      
      while
(choix <1 || choix > 4)
      {
         std::cout <<
"Choix incorrect ! "
                          <<
"Veuillez le saisir a nouveau : ";
         std::cin >> choix;
      }
   }
   {
      
if(choix == 1);
      {
         
int i = 0;
         
do
         {
            i++;
            {
                std::cout <<
"Entrez une valeur decimale (de 0 a 9) : ";
                std::cin >> CHIFRE;

                while(CHIFRE<=0)
                {
                     std::cout <<
"Erreur ! Le nombre doit etre superieur a 0 et comporter que 10 chifres : ";
                     std::cin >> CHIFRE;
                }
                 std::cout <<
"Valeur octale : " << std::oct << CHIFRE << std::endl;
                 std::cout <<
"Valeur hexadecimal : " << std::hex << CHIFRE << std::endl;
               }
            }

            while(i < 1000);
      }
   }
   {
      
else
if(choix == 2);
      {
         
int i = 0;
        
do
        {
            i++;
            {
                std::cout <<
"Entrez une valeur octal : ";
                std::cin >> std::oct >> CHIFRE;

               while(CHIFRE<=0 && CHIFRE>=7) 
               {
                     std::cout <<
"Erreur ! Le nombre doit etre superieur a 0, inferieur a 7 et comporter que 10 chifres : ";
                     std::cin >> CHIFRE;
               }
               std::cout <<
"Valeur decimal : " << std::dec << CHIFRE << std::endl;
               std::cout <<
"Valeur hexadecimal : " << std::hex << CHIFRE << std::endl;
            }
         }

         while(i < 1000);
      }
   }
   {

      else
if(choix == 3);
      {

         int i = 0;

        do
        {
            i++;
            {
               std::cout <<
"Entrez une valeur hexadecimal (de 0 a e) : ";
               std::cin >> std::hex >> CHIFRE;

               
               while(CHIFRE<=0)
               {
                   std::cout <<
"Erreur ! Le nombre doit etre superieur a 0, inferieur a e et comporter que 10 chifres : ";
                   std::cin >> CHIFRE;
               }
               std::cout <<
"Valeur octal : " << std::oct << CHIFRE << std::endl;
               std::cout <<
"Valeur decimal : " << std::dec << CHIFRE << std::endl;
            }
         }

         while(i < 1000);
      }
   }
   {

      else
      {

         break;
      }
   }
[mailto:}@RW3L }
je commence juste la programmation et lors de la compilation (je bosse sous geany) il ne comprend pas else if et else.
de plus je ne suis pas sur de l'action pour quitter le programme (il me semble que se soit break).

Si quelqu'un povait me donner une reponse claire et a ma porté se serait cool.

Merci d'avance

@]
RW3L

24 réponses

Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
6 avril 2009

par contre une petite remarque, je tape bien else if et else (il y a eu des problemmes lors de l'envoi du message!!) 

@RW3L
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Enlève les ; après tes if et else if. Mettre un ; directement après un if() revient à dire qu'il ne se passera rien même si la condition est vrai.

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Le block qui suit le if sera exécuter cependant, même si la condition est fausse, car il n'est pas attaché au if (à cause du ;)

C++ (@++)<!--
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
6 avril 2009

merci
Quand a l'action qui permet de quitter mon programme de quoi s'agit-il?

@RW3L
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Dans le main, tu peux faire directement return 0.

C++ (@++)<!--
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
6 avril 2009

j'ai essayer sans les ";" mais rien de plus. Domage voila ne image de a compilation:

voila.
@RW3L
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Tu as beaucoup trop de {} dans ton code.

Pour faire simple, mettre du code entre {} revient créer une "sous-section locale". Tout ce qui est en dehors de cette "sous-section" n'y a pas accès.

Alors quand tu fais:

{
   if(...) {...}
}
{
  else if(...) {...}
}

le else if() cherche un if  inexistant (plutôt invisible) car dans une autre section.

Enlève les crochets inutiles ce qui devrait donner ceci:

if(...){...}
else if(...){...}
else {...}

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Oh et un break ne s'utilise que dans une boucle (while, do while, for) et un switch case

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Et aussi system ne fait pas partie d'une quelconque classe. C'est une fonction.
Pas de std:: devant donc et elle demande aussi d'inclure stdlib.h

C++ (@++)<!--
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
moi mon prefere c'est :

while(i < 1000);

franchement, tu devrais apprendre la syntaxe du C++ parce-que la tu fais vraiment n'importe quoi
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Ce sont des do/while.

C++ (@++)<!--
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
au temps pour moi, son indent m'a induit en erreur
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
6 avril 2009

Merci de me defendre mais c'est vrai aussi que je fais n'imporste quoi du momment que sa marche sans planté. J'ai une autre question, comment faire une boucle pour qu'apres chaque convertion je me retrouve au menu (je suis les cours d'un bouquin et ce n'est pas indiqué). Merci

@RW3L
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
ouais enfin t'as des choses qui compilent mais qui ne se font pas :

main(void)
{
{

...

}
{

...

if(choix == 1); // if totalement inutile
{

...


bref, si on resume, ca ne sert a rien de tenter de faire un truc avant d'avoir lu comment ca fonctionne...
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
6 avril 2009

dans ces cas là tu peux m'envoyer des cour clair pour de la prog en c++ j'en ai pas encore trouvé...

@RW3L
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
la syntaxe d'un if c'est :

if (condition){
//if statement
}else if {
//else if statement
}else{
//else statement
}

parfois t'as pas de else if


if (condition){
//if statement
}else{
//else statement
}

parfois t'as pas de else


if (condition){
//if statement
}

quand le statement ne fait qu'une seule instruction, on peut enlever les accolades qui l'entournent.


En C, mettre des {} te permet de declarer des variables qui ne viveront qu'entre le debut et la fin d'accolades.
En Cpp, tu gardes la meme notion de vie des variables comprise entre les accolades.
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
6 avril 2009

okay merci on comprend tout de suite mieux moi je mettait entre accolade pour deferencié ce qui prouve que mon else if et if etaient "cassés".
Quand a une boucle pour qu'apres une convertion je retourne au menu tu en a une (stp).?

@RW3L
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
6 avril 2009

#include


bool boucler = true;


int CHIFRE;


int choix;


int main(void)


{


std::system("cls");


std::cout << "**********MENU**********" << std::endl;


std::cout << "1 - Decimal > octal et hexadecimal." << std::endl;


std::cout << "2 - Octal > decimal et hexadecimal." << std::endl;


std::cout << "3 - Hexadecimal > octal et decimal." << std::endl;


std::cout << "4 - Quitter." << std::endl;





std::cout << "Entrez votre choix : ";


std::cin >> choix;





while(choix <1 || choix > 4)


{


std::cout << "Choix incorrect ! "


<< "Veuillez le saisir a nouveau : ";


std::cin >> choix;


}


if(choix == 1)


{


int i = 0;


do


{


i++;


std::cout << "Entrez une valeur decimale (de 0 a 9) : ";


std::cin >> std::dec >> CHIFRE;





while(CHIFRE<=0)


{


std::cout << "Erreur ! Le nombre doit etre superieur a 0 et comporter que 10 chifres : ";


std::cin >> std::dec >> CHIFRE;


}





std::cout << "Valeur octale : " << std::oct << CHIFRE << std::endl;


std::cout << "Valeur hexadecimal : " << std::hex << CHIFRE << std::endl;





}


while(i < 1000);


}


else if(choix == 2)


{


int i = 0;


do


{


i++;


std::cout << "Entrez une valeur octal : ";


std::cin >> std::oct >> CHIFRE;





while(CHIFRE<=0 && CHIFRE>=7)


{


std::cout << "Erreur ! Le nombre doit etre superieur a 0, inferieur a 7 et comporter que 10 chifres : ";


std::cin >> std::oct >> CHIFRE;


}





std::cout << "Valeur decimal : " << std::dec << CHIFRE << std::endl;


std::cout << "Valeur hexadecimal : " << std::hex << CHIFRE << std::endl;





}


while(i < 1000);


}


else if(choix == 3)


{


int i = 0;


do


{


i++;


std::cout << "Entrez une valeur hexadecimal (de 0 a e) : ";


std::cin >> std::hex >> CHIFRE;





while(CHIFRE<=0)


{


std::cout << "Erreur ! Le nombre doit etre superieur a 0, inferieur a e et comporter que 10 chifres : ";


std::cin >> std::hex >> CHIFRE;


}





std::cout << "Valeur octal : " << std::oct << CHIFRE << std::endl;


std::cout << "Valeur decimal : " << std::dec << CHIFRE << std::endl;





}


while(i < 1000);


}


else


{


return(0);


}





}





autrement voila il ne manque plus que la mise en forme

@RW3L
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
39
tu pourrais indenter stp ?

et mettre tes variables dans ta fonction main ?
Messages postés
17
Date d'inscription
samedi 14 février 2009
Statut
Membre
Dernière intervention
6 avril 2009

ma fonction booleene ne sert a rien j'ai oublié de la viréé

@RW3L