Programme de calculatrice

noussayba -  
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
ce programme de calculatrice ne cesse de donner des valeurs fausses; pourquoi ?

#include<stdio.h>
main(){

int a;
int b;
char op;

printf("Introduire les entiers a et b\n");
scanf("%i", &a);
scanf("\n%i", &b);
printf("Introduire l'opération voulue\n");
scanf("%s", &op);
switch (op){
case '+' :

printf("a + b = %i", a + b);
break;
case '*' :

printf("a*b = %i", a*b);
break;
case '/' :
if (b == 0){
printf("Operation impossible");

}else{

printf("a/b = %.2f", a/b);
}

break;
case '-' :

printf("a-b = %i\n", a-b);
default :
printf("Operation non existante");

}

}




Configuration: Windows / Chrome 89.0.4389.82
A voir également:

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
peux-tu donner un exemple?
à ta place, je ferais aussi des printf de a et de b.
0
Dalfab Messages postés 706 Date d'inscription   Statut Membre Dernière intervention   101
 
Bonjour,

tu utilises
scanf("%s", &op);
, mais le format %s s'attend à avoir comme paramètre un buffer suffisamment grand pour recevoir la chaine saisie donc pour un chaine de 1 caractère, il en faut au moins 2 (le caractère et le terminateur!)
Donc ou bien tu utilises une chaîne d'au moins 2 caractères et le format %s ou bien tu utilises le format %c. Ça devient alors :
scanf(" %c", &op);
et attention if faut une espace avant le %c pour sauter le retour chariot qui est resté lors de l'utilisation précédente de
scanf()
.

Pour une raison similaire
printf("a/b = %.2f", a/b);
ne fonctionnera pas. Car
a/b
est une division entre 2 entiers, c'est donc une division entière qui retourne un
int
. Et tu indiques le format %.2f qui s'attend à un flottant.
La solution est de forcer un calcul qui retourne un flottant en transformant au moins un des 2 opérantes en flottant:
printf( "a/b = %.2f", (double)a / b );
0