Switch ne veut pas reconnaitre une variable float

S_M_E Messages postés 26 Date d'inscription mardi 27 février 2007 Statut Membre Dernière intervention 29 août 2007 - 20 juil. 2007 à 04:12
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 - 22 juil. 2007 à 11:31
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???
A voir également:

2 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
20 juil. 2007 à 05:26
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++ (@++)<!--
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
22 juil. 2007 à 11:31
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
0
Rejoignez-nous