Next: Récréation
Up: Les pointeurs
Previous: Les dernières instructions
Sous-sections
É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.
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écute
exit(1).
Ceci ne réalise pas un interface utilisateur bien agréable, car
il serait plus intéressant de 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 de
scanf 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);
}
}
Bernard Cassagne
1998-12-09