IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
next up previous contents index
Next: Récréation Up: Les pointeurs Previous: Les dernières instructions

Sous-sections

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é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