Probleme avec If et else

Résolu
violatorstrain2 Messages postés 17 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 6 avril 2009 - 14 févr. 2009 à 14:03
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 16 févr. 2009 à 13:42
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

violatorstrain2 Messages postés 17 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 6 avril 2009
14 févr. 2009 à 15:54
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
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 févr. 2009 à 16:48
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++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 févr. 2009 à 16:50
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++ (@++)<!--
3
violatorstrain2 Messages postés 17 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 6 avril 2009
14 févr. 2009 à 17:16
merci
Quand a l'action qui permet de quitter mon programme de quoi s'agit-il?

@RW3L
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 févr. 2009 à 17:21
Dans le main, tu peux faire directement return 0.

C++ (@++)<!--
3
violatorstrain2 Messages postés 17 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 6 avril 2009
14 févr. 2009 à 18:07
j'ai essayer sans les ";" mais rien de plus. Domage voila ne image de a compilation:

voila.
@RW3L
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 févr. 2009 à 18:44
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++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 févr. 2009 à 18:47
Oh et un break ne s'utilise que dans une boucle (while, do while, for) et un switch case

C++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
14 févr. 2009 à 18:49
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++ (@++)<!--
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
15 févr. 2009 à 19:11
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
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
16 févr. 2009 à 00:35
Ce sont des do/while.

C++ (@++)<!--
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 févr. 2009 à 00:53
au temps pour moi, son indent m'a induit en erreur
3
violatorstrain2 Messages postés 17 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 6 avril 2009
16 févr. 2009 à 09:38
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
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 févr. 2009 à 11:27
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...
3
violatorstrain2 Messages postés 17 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 6 avril 2009
16 févr. 2009 à 11:30
dans ces cas là tu peux m'envoyer des cour clair pour de la prog en c++ j'en ai pas encore trouvé...

@RW3L
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 févr. 2009 à 11:44
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.
3
violatorstrain2 Messages postés 17 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 6 avril 2009
16 févr. 2009 à 11:49
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
3
violatorstrain2 Messages postés 17 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 6 avril 2009
16 févr. 2009 à 12:18
#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
3
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
16 févr. 2009 à 12:39
tu pourrais indenter stp ?

et mettre tes variables dans ta fonction main ?
3
violatorstrain2 Messages postés 17 Date d'inscription samedi 14 février 2009 Statut Membre Dernière intervention 6 avril 2009
16 févr. 2009 à 12:57
ma fonction booleene ne sert a rien j'ai oublié de la viréé

@RW3L
3
Rejoignez-nous