Exercice 2

Reprendre la calculette réalisée en fin de chapitre sur les pointeurs et y rajouter une gestion correcte des erreurs. Si l'utilisateur tape une ligne incorrecte, on désire l'émission d'un message d'erreur, et une continuation de la boucle de calcul.

#include "stdio.h"

/*****************************************************************************/
/*                                                                           */
/*                              main                                         */
/*                                                                           */
/*****************************************************************************/
int main(void)
{
FILE * fi;
char nom[80];
char article[80];
int nombre,prix;

if ((fi = fopen("exer6.data","r")) == NULL)
   printf("Impossible d'ouvrir le fichier exer6.data\n");
else
   {
   while(fscanf(fi,"%s %s %d %d",nom,article,&nombre,&prix) != EOF)
      printf("%s %s %d\n",nom,article,nombre * prix);
   fclose(fi);
   }

return 0;
}
#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   */
char buf_err[80];

while (1)
   {
   if ((ret = scanf("%d %c %d",&i,&c,&j)) != 3)
      {
      if (ret == EOF) exit(0);
      scanf("%[^\n]",buf_err);   /*   on mange la partie erronée   */
      printf("Erreur de syntaxe : %s\n",buf_err);
      continue;
      }
   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