S_M_E
Messages postés26Date d'inscriptionmardi 27 février 2007StatutMembreDernière intervention29 août 2007
-
20 juil. 2007 à 04:12
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 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...");
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 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
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 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)