Programme de calculatrice
noussayba
-
Dalfab Messages postés 706 Date d'inscription Statut Membre Dernière intervention -
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");
}
}
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:
- Programme de calculatrice
- Programme demarrage windows - Guide
- Calculatrice gratuit - Télécharger - Calcul & Conversion
- Installer calculatrice - Télécharger - Calcul & Conversion
- Message programmé iphone - Guide
- Mettre en veille un programme - Guide
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.
peux-tu donner un exemple?
à ta place, je ferais aussi des printf de a et de b.
Bonjour,
tu utilises
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 :
Pour une raison similaire
La solution est de forcer un calcul qui retourne un flottant en transformant au moins un des 2 opérantes en flottant:
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/best 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 );