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(void)
{
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);
   }
return 0;
}



Matthieu Moy 2017-02-08