Switch case : utilisation de * / + -

did2604 Messages postés 29 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 19 août 2008 - 25 oct. 2003 à 14:32
did2604 Messages postés 29 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 19 août 2008 - 26 oct. 2003 à 14:29
Bonjour,

Je suis débutant et j'ai un problème sur un programme utilisant l'alternative switch case. En fait, je dois utiliser mon case sur des signes tels que "*" "/" "+" "-", mais je n'y arrive pas. En général, moi je me sers de la structure suivante :
switch (choix)
{
case 1 : instruction;
break;
case 2 : instruction2;
break;
}

donc en toute logique j'essaie qqchose du style :

switch (choix)
{
case * : instruction;
break;
case / : instruction2;
break;
}

mais ça ne fonctionne pas... j'ai bien essayé de mettre les * / + - entre ' ' du style '*' '/'... mais ça ne fonctionne pas

Quelqu'un aurait-il la solution pour moi ? Merci d'avance.

7 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
25 oct. 2003 à 14:51
switch (choix)
{
case '*' : instruction;
break;
case '/' : instruction2;
break;
}

vu que c'est des caracteres
0
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
25 oct. 2003 à 14:54
Salut ;)

Tout dépend du type de la variable choix mais ça sera en aucun cas case *: instruction

Si choix est un char, case '*': devrait marcher
Si choix est un char*, if ( !strcmp(choix, "*") ) me semble plus approprié.

Met un peu plus de code pour qu'on puisse t'aider plus facilement.

A +

Chouchou
0
did2604 Messages postés 29 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 19 août 2008
25 oct. 2003 à 15:04
Voici en réponse pour Chouchou (merci de m'avoir répondu :)) le programme en entier qui fonctionne parfaitement si j'attribue des chiffres de 1 à 4 pour les opérations math et que je fais un case 1, case 2, case 3 et case 4.
___________________________________________________________
#include <stdio.h>
void main (void)
{
/* déclaration des variables */
int a,b,op,add,sub,multi,div;
float DIV,A,B;
/* entrée des données */
printf ("\nEntrer un entier pour 'a' : ");
scanf ("%d",&a);
printf ("\nEntrer un entier pour 'b' : ");
scanf ("%d",&b);
printf ("\nEntrer un caractère pour 'op' [ + | - | * | / ]' : ");
scanf ("%d",&op);
DIV=(float)div;
A=(float)a;
B=(float)b;
/* traitement des données et affichage des résultats */
switch (op)
{
case '+' : add=a+b;
printf ("\na + b = %d\n",add);
break;
case '-' : sub=a-b;
printf ("\na - b = %d\n",sub);
break;
case '*' : multi=a*b;
printf ("\na * b = %d\n",multi);
break;
case '/' : if (b!=0)
{
DIV=A/B;
printf ("\na / b = %f\n", DIV);
}
else
{
printf ("\nErreur, vous avez entre 0 pour 'b' !!\n");
}
}

}
___________________________________________________________
0
Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
25 oct. 2003 à 15:22
scanf ("%d",&op);

Tu entre ton caractère (une lettre) dans un int (un nombre) ! pas étonnant que ca ne marche pas...

déclare ta variable comme ca
char op;
tu verras, c tout de suite beaucoup plus facile pour la comparer ;)
0

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

Posez votre question
did2604 Messages postés 29 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 19 août 2008
26 oct. 2003 à 11:29
Merci de la réponse Anacrox, j'ai effectué le changement comme suit, mais j'ai toujours un problème : lorsque le programme me demande d'entrer le signe de l'opération, il saute les "case" et va direct à la fin, j'avoue ne pas comprendre...
___________________________________________________________
#include <stdio.h>
void main (void)
{
/* déclaration des variables */
int a,b,sub,multi,div,add;
char op;
/* entrée des données */
printf ("\nEntrer un entier pour 'a' : ");
scanf ("%d",&a);
printf ("\nEntrer un entier pour 'b' : ");
scanf ("%d",&b);
printf ("\nEntrer un caractère pour 'op' [ + | - | * | / ]' : ");
scanf ("%c",&op);
/* traitement des données et affichage des résultats */
switch (op)
{
case '+' : add=a+b;
printf ("\na + b = %d\n",add);
break;
case '-' : sub=a-b;
printf ("\na - b = %d\n",sub);
break;
case '*' : multi=a*b;
printf ("\na * b = %d\n",multi);
break;
case '/' : if (b!=0)
{
div=a/b;
printf ("\na / b = %d\n", div);
}
else
{
printf ("\nErreur, vous avez entre 0 pour 'b' !!\n");
}

}

}

_________________________________________________________
0
cs_Chouchou182 Messages postés 252 Date d'inscription vendredi 13 juin 2003 Statut Membre Dernière intervention 25 avril 2011 1
26 oct. 2003 à 12:57
Salut

printf ("\nEntrer un caractère pour op [ + | - | * | / ] : ");
fflush(stdin) ;
scanf ("%c",&op);

fflush vide le fux spécifié

Chez moi ça marche

A bientôt

Chouchou
0
did2604 Messages postés 29 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 19 août 2008
26 oct. 2003 à 14:29
Hello Chouchou,

Merci pour ton message, cela fonctionne parfaitement :) Je ne risque plus de l'oublier celui-là, mais on ne m'avait jamais réellement expliqué l'utilité exacte du "fflush", maintenant je le sais :)

Merci également aux autres & à l'exceptionnelle sympathie des gens du forum envers les débutants :)
@+
0
Rejoignez-nous