Faire un choix (Case, Switch via char)

Fermé
Phaeris Messages postés 5 Date d'inscription mardi 26 février 2013 Statut Membre Dernière intervention 5 mars 2013 - 26 févr. 2013 à 02:13
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 6 mars 2013 à 07:12
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
26 févr. 2013 à 18:00
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 mardi 26 février 2013 Statut Membre Dernière intervention 5 mars 2013
26 févr. 2013 à 19:26
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 mardi 26 février 2013 Statut Membre Dernière intervention 5 mars 2013
27 févr. 2013 à 01:19
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 mardi 26 février 2013 Statut Membre Dernière intervention 5 mars 2013
5 mars 2013 à 19:03
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 mardi 26 février 2013 Statut Membre Dernière intervention 5 mars 2013
5 mars 2013 à 19:05
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 samedi 10 novembre 2012 Statut Membre Dernière intervention 27 février 2015 3
3 mars 2013 à 14:17
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
3 mars 2013 à 20:00
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 samedi 10 novembre 2012 Statut Membre Dernière intervention 27 février 2015 3
5 mars 2013 à 22:22
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
5 mars 2013 à 22:50
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 samedi 10 novembre 2012 Statut Membre Dernière intervention 27 février 2015 3
5 mars 2013 à 23:07
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
Modifié par fiddy le 6/03/2013 à 00:01
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 jeudi 28 février 2013 Statut Membre Dernière intervention 6 mars 2013
4 mars 2013 à 00:24
#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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
4 mars 2013 à 16:24
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 jeudi 28 février 2013 Statut Membre Dernière intervention 6 mars 2013
4 mars 2013 à 17:01
ben oui ca marche
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
4 mars 2013 à 23:49
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 jeudi 28 février 2013 Statut Membre Dernière intervention 6 mars 2013
6 mars 2013 à 01:27
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 jeudi 28 février 2013 Statut Membre Dernière intervention 6 mars 2013
6 mars 2013 à 01:27
ben je comprend pas pk c interdit si ca fonctionne . ?
0