Faire un choix (Case, Switch via char)

Phaeris Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je voudrai choisir au début si je veux un multiplication ou une addition par exemple,
comment faire,

Merci de vos réponses, voici le fichier:
(Noter que le choix doit ce faire dans ce dossier, et non dans un .h)

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])


{
int choix;
printf("\n\nCALCULATRICE V.1 - By Phaeris\n\n");
printf("MENU\n\n");

}

{
Addition()

// Addition
int Nombre1;
int Nombre2;
int resultat1;

printf("\n\nEntrez un nombre\n\n");
scanf("%d", &Nombre1);
printf("\n\nEntrez le deuxième nombre\n\n");
scanf("%d", &Nombre2);

resultat1 = Nombre1 + Nombre2;

printf("\n\nResultat : %d\n\n", resultat1);
// Addition
}

{
// Soustraction
int Nombre3;
int Nombre4;
int resultat2;

printf("\n\nEntrez un nombre\n\n");
scanf("%d", &Nombre3);
printf("\n\nEntrez le deuxième nombre\n\n");
scanf("%d", &Nombre4);

resultat2 = Nombre3 - Nombre4;

printf("\n\nResultat : %d\n\n", resultat2);
// Soustraction
}

{
// Multiplication
int Nombre5;
int Nombre6;
int resultat3;

printf("\n\nEntrez un nombre\n\n");
scanf("%d", &Nombre5);
printf("\n\nEntrez le deuxième nombre\n\n");
scanf("%d", &Nombre6);

resultat3 = Nombre5 * Nombre6;

printf("\n\nResultat : %d\n\n", resultat3);
// Multiplication
}

{
// Division
int Nombre7;
int Nombre8;
int resultat4;

printf("\n\nEntrez un nombre\n\n");
scanf("%d", &Nombre7);
printf("\n\nEntrez le deuxième nombre\n\n");
scanf("%d", &Nombre8);

resultat4 = Nombre7 / Nombre8;

printf("\n\nResultat : %d\n\n", resultat4);
// Division
}
A voir également:

6 réponses

Utilisateur anonyme
 
Pourquoi faire aussi compliqué ?
Tu peux passer l'opérateur du calcul en paramètre à une fonction pour faire plus simple, par exemple :


#include <stdio.h>
#include <stdlib.h>
#include <math.h>

double process(double val1,double val2,char op);

int main() {
  double x, y;
  char op;
  printf("Premier nombre : ");
  scanf("%lf", &x);
  // saisie du 2ème nombre
 // saisie de l'opérateur
  printf("%f %c %f = %f\n", x, op, y, process(x,y,op));
  return 0;
}


double process(double val1,double val2,char op) {
  switch (op) {
  case '+':
    return val1 + val2;

  case '-':
    return val1 - val2;

  case '/':
    return val1 / val2;

  default:
    return fmod(val1,val2); // Car dans cet exemple, on travaille sur des flottants donc on doit utiliser fmod
  }
  exit(EXIT_FAILURE);
}
1
Phaeris Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir,

Merci pour cette réponse rapide, peux-tu m'expliquer en détails svp,
car je ne veux pas faire un copier coller sans rien comprendre...

Cependant, je teste ça dans la soirée, je passerai sous linux.
0
Phaeris Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
J'ai Oublier de préciser que je débute :/

je suis sous Ubuntu 12.10
0
Phaeris Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Depuis mon dernier post, j'ai travaillé en C. J'ai ré-écris ma calculette comme ca:

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
int choix;

printf("\n\n\n\n\n\n\n CALCULATRICE by Phaeris\n");
printf("\n Projet 1\n\n");
printf(" ----> MENU <----");
printf("\n\n Addition...............1\n");
printf("\n Soustraction...........2\n");
printf("\n Multiplication.........3\n");
printf("\n Division...............4\n");
printf("\n\nTapez le numero de votre choix puis appuyez sur [ENTRER].\n");
scanf("%d", &choix);
printf("\n");

switch (choix)
{
case 1:
printf("Addition");
int add1;
int add2;
int add;

printf("\n\nEntrez un nombre\n\n");
scanf("%d", &add1);
printf("\n\n+\n\n");
scanf("%d", &add2);

add = add1 + add2;

printf("\n\nEgale : %d\n\n", add);
break;
case 2:
printf("Soustraction");
int sous1;
int sous2;
int sous;

printf("\n\nEntrez un nombre\n\n");
scanf("%d", &sous1);
printf("\n\n-\n\n");
scanf("%d", &sous2);

sous = sous1 - sous2;

printf("\n\nEgale : %d\n\n", sous);
break;
case 3:
printf("Multiplication");
int multi1;
int multi2;
int multi;

printf("\n\nEntrez un nombre\n\n");
scanf("%d", &multi1);
printf("\n\n*\n\n");
scanf("%d", &multi2);

multi = multi1 * multi2;

printf("\n\nEgale : %d\n\n", multi);
break;
case 4:
printf("Division");
int div1;
int div2;
int div;

printf("\n\nEntrez un nombre\n\n");
scanf("%d", &div1);
printf("\n\n/\n\n");
scanf("%d", &div2);

div = div1 / div2;

printf("\n\nEgale : %d\n\n", div);
break;

}

return 0;

}
0
Phaeris Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
Code Lisible + Fonctionne Impec
maintenant, comment a la fois choisir ses nombres, et choisir le signe de l'opération via les touches < + >
< - >
< * >
< / >

??
0

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

Posez votre question
chimou-gaga Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   3
 
Salut
Essaye ça, facile et efficace
#include <stdio.h>
void main ()
{
	int a,b,som,dif,pro,choix;
	float div;
	do
	{
		printf("entrez 2 entiers positifs\n");
		scanf("%d",&a);
		scanf ("%d",&b);
	}
	while ((a<0)||(b<0));

	som=a+b;
	dif=a-b;
	pro=a*b;
	div= a/b;

	printf (" menu op arithmetique\n");
	printf ("1: a+b , 2:a-b , 3:a*b , 4:a/b , 0:quitter\n");
	printf ("entrez votre choix \n");
	scanf ("%d",&choix);

	switch (choix)
	{
		case 1: printf("la somme est %d\n",som); break;
		case 2: dif= printf("la diffirence est %d \n", dif);break;
		case 3: pro=printf ("le produit est %d \n",pro);break;
		case 4: div=printf ("le quotion de la division est %f \n",div);break;
		case 0: printf("au revoire");break;
		default :printf("erreur");break;
	}

} 
-1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
1. main() renvoie un int et retourne un 0.
2. C'est dommage de calculer som dif, pro et div dans tous les cas. Autant le calculer dans le switch.
3. dif=printf("...%d\n",dif);
Je vois pas l'intérêt de renvoyer la valeur de printf() dans la variable de calcul...
4. Attention au cas où b=0, cela fait planter le programme.
0
chimou-gaga Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   3
 
t as raison apropos de calculer som dif, pro et div dans tous les cas quand on peut le faire lors du choix. ainsi que pour le cas de b=0. j'ai écris le code vite fais , sans l'optimiser :/ J'avoue je ne suis qu'une débutante :S
mais j'ai pas compris ta 1ere remarque de main () car on l utilise souvent en classe.
0
Utilisateur anonyme
 
mais j'ai pas compris ta 1ere remarque de main () car on l utilise souvent en classe


?

Le fait de que le main retourne un entier est une norme. Je suis d'accord que ça fonctionne avec void main, mais comment savoir si le programme s'est exécuté correctement si tu n'a pas de valeur de retour ?
Fais des tests avec des programmes existants (commande unix par exemple : ls, cd...), tu verras que chacune renvoie 0 si tout s'est bien passé, un entier différent de 0 dans les autres cas.
0
chimou-gaga Messages postés 24 Date d'inscription   Statut Membre Dernière intervention   3
 
si j'ai bien compris, le main retourne un 0 si le programme s'est correctement exécuté. J'ai cru que le fait d'avoir 0 erreur et le résultat attendu c'est suffisant pour savoir que le programme est correcte.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Il ne faut pas confondre les erreurs de compilation avec les erreurs d'exécutions, ni avec les valeurs de retour. Trois notions différentes.
La norme dit que le prototype du main() sans argument en C est : int main (void), et int main (int argc, char *argv[]) si on souhaite récupérer les arguments.
Et le programme doit se terminer par : return 0; (ou return EXIT_SUCCESS;)

Si les profs t'ont appris en classe : main(). C'est qu'ils sont de l'ancienne génération (pré-ansi) ;-).
0
kaima1 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
#include<stdio.h>
#include<stdlib.h>

int main()
{

int var1, var2;


void Menu(){
printf("A------------Addition\n");
printf("B------------Soustraction\n");
printf("D------------Division\n");
printf("choisir\n\n");


printf("veuillez entrer la 1ere valeur\n");
scanf("%d", &var1);
printf("veuillez entrer la 2eme valeur\n");
scanf("%d", &var2);

}
char choix;
do{

Menu();

choix=getch();
switch(choix)
{
case 'A':
case 'a':
printf("Addition :%d\n\n",var1+var2);
break;
case 'B':
case 'b':
printf("Soustraction:%d\n \n",var1 - var2);
break;
case 'D':
case 'd':
printf("Division: %d\n \n", var1 / var2);
break;
default :
printf("choix incorrect\n \n");


}





}while(choix!='A'||choix!='B'||choix!='D');





}
-1
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Définir une fonction dans une autre, c'est nouveau ?
Bref, ca risque pas de compiler.
0
kaima1 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
ben oui ca marche
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Ce n'est pas parque ça marche que c'est correct.
Les fonctions imbriquées sont interdites en C...
De plus, getch() n'est pas une fonction standard.
0
kaima1 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
oops ben j'avoue que je suis une débutante, des que ca marche pour moi je pense que c bon
0
kaima1 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
ben je comprend pas pk c interdit si ca fonctionne . ?
0