![]()
Exercice ![]()
![]()
![]()
![]()
![]()
Suivant: Récréation Début: Les pointeurs Précédent: Les dernières instructions
Paragraphes
Exercice
Écrire une procédure main se comportant comme une calculette c'est à dire exécutant une boucle sur :
- 1.
- lecture d'une ligne supposée contenir un entier, un opérateur et un entier (ex : 12 + 34), les opérateurs seront
+ - * / %
;- 2.
- calculer la valeur de l'expression ;
- 3.
- imprimer le résultat.
Commentaire de la solution
Nous faisons ici un commentaire sur la solution proposée qui se trouve à la page suivante. Dans le cas où la ligne lue n'a pas une syntaxe correcte (elle ne contient pas un nombre, un signe, un nombre), le programme émet un message d'erreur et exécuteexit(1)
. Ceci ne réalise pas un interface utilisateur bien agréable, car il serait plus intéressant continuer la boucle au lieu de terminer le programme. Cela n'a pas été implémenté car ce n'est pas réalisable à l'aide des seules possibilités de base descanf
qui ont été présentées. Dans le chapitre << Les entrées-sorties >>,scanf
sera expliqué de manière exhaustive et une meilleure version de ce programme sera présentée.
#include <stdio.h> enum {FAUX, VRAI}; /*****************************************************************************/ /* */ /* main */ /* */ /*****************************************************************************/ int main() { int i,j,r; /* les opérandes */ char c; /* l'opérateur */ char imp; /* booléen de demande d'impression du résultat */ int ret; /* code de retour de scanf */ while (1) { if ((ret = scanf("%d %c %d",&i,&c,&j)) != 3) { if (ret == EOF) exit(0); printf("Erreur de syntaxe\n"); exit(1); } imp = VRAI; switch (c) { case '+' : r = i + j; break; case '-' : r = i - j; break; case '*' : r = i * j; break; case '/' : if ( j == 0) { printf("Division par zéro\n"); imp = FAUX; } else r = i / j; break; case '%' : r = i % j; break; default : printf("l'opérateur %c est incorrect\n",c); imp = FAUX; } /* fin du switch */ if (imp) printf("%d\n",r); } }
30/9/1997