Switch ne veut pas reconnaitre une variable float

Signaler
Messages postés
26
Date d'inscription
mardi 27 février 2007
Statut
Membre
Dernière intervention
29 août 2007
-
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
-
mon compilateur me dit que ma variable dollar de type float ne peu etre quantifié par mon switch:

 main()

      char c,b;
      int transfer;
      float dollar,euro;
      long test1,test2,test3;
     
         
      printf(" ?URODOLLAR$\n");
      b=getchar();
      printf(" appuyer sur une touche...\n");
     
      getchar();
      clrscr();
      printf("\n");
                 
      printf("entrez la valeur du dollar pour 1 euro\t");
      scanf("%f",&dollar);
     
     
      printf("\n");
      printf(" la valeur du dollar est :\t %f\n", dollar);
    
      switch (dollar)
      {
      case (dollar==0)
               
       printf("\n");
       c=getchar();          
      printf("division par zéro interdite. Sortie du programme.\n");
      test2=0;
      test3=0;
      printf("\n l'indicateur est %d %d %d ",test1,test2,test3);
      transfer=100;
      getchar();
      break;
     
     
      case (dollar!=euro)
     
        test2=(dollar!=euro);              
       printf("\n");
       c=getchar();               
      printf(" la valeur du dollar est bien differente de l'euro (1=OUI  0=NON)?\t %d\n",euro!=dollar);
      test1=0;
      test3=0;
      euro=1/dollar;
      printf("la valeur de l'euro pour $%f est %f?\n",dollar,euro);
      printf("\n l'indicateur est  %d %d %d",test1,test2,test3);
      transfer=010;
      printf("\n %d",transfer);
      getchar();
      break;
     
     
     
      case (dollar==euro)
     
         
          printf("le calcule est inutile!!!!");
          test2=0;
          test1=0;
          printf("l'indicateur est %d %d %d",test1,test2,test3);
          transfer=001;
          c=getchar();
          getchar();
          break;
         
     }
     
     
      printf("\n");
      printf("  donc pour $1 on a %f ?",euro);
     
      printf("\n");
      c=getchar();
      printf(" appuyer sur une touche...");
     
      getchar();
      clrscr();
      c=getchar();
      printf(" appuyer sur une touche...");
     
      getchar();
     
      clrscr();
      printf("indicateur transferer: %d     
      return 0;
     
     
}


le test switch ne marche que pour les variables de type integer???

2 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
1. Non switch ne prend pas de float

2. case (dollar==euro) ???? Ça compile ça ? Tu sais comment fonctionne un switch ?

Exemple:
switch (x) {
    case 1:
       printf("x=1");
       break;
    case 2:
       printf("x=2");
       break;

    default: printf("x=?");
}

Ceci test si x égal 1 ou 2. Si oui, il affiche le message en conséquence. Sinon, il affiche x=?.
Important à retenir, les valeurs que prennent les case doivent être constantes. Pas de variable.

Exemple:
int i = 1;
switch(i) {
    case 1:
    case 2:
    ...
}
OK

int i = 1, j= 3;
switch(i) {
    case j:
    ... 
}
j N'EST PAS CONSTANT
NE FONCTIONNE PAS

C++ (@++)<!--
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
20
salut,

concernant le switch : effectivement l'expression après le case doit être une CONSTANTE...et pour le cas "tout le reste" tu as default...ensuite, case (dollar == 0) n'a pas de sens puisque le switch est déjà sur dollar...

enfin, switch ne peut pas prendre les float car l'egalité n'existe pas avec les float...en effet, un float est un arrondi donc 0 = 0 n'est pas forcément vrai parce que 0.0000001 != -0.0000001 pourtant ca vaut à peut près 0...le test d'égalit entre float se fait par fabs(float1 - float2) < seuil (où seuil est par exemple, 0.0001)

ShareVB