Programme de calculatrice

Fermé
noussayba - 17 mars 2021 à 11:06
Dalfab Messages postés 706 Date d'inscription dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 - 17 mars 2021 à 14:15
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 23352 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 novembre 2024 Ambassadeur 1 554
17 mars 2021 à 13:20
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 dimanche 7 février 2016 Statut Membre Dernière intervention 2 novembre 2023 101
17 mars 2021 à 14:15
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