20syl[mailto:sylnet@netcourrier.com sylnet@netcourrier.com]
Bonjour
Voilà mon programme
Mais comment faire pour gérer les erreurs ?
exemple:
*6+5+9 = erreur
1++2 = erreur
3+3/ = erreur
prog:
---------------------------------
#include <ctype.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#define MAXPILE 256
#define OPTION_EXPR "-e"
#define TYPE_OPTION 1
#define TYPE_FICHIER 2
char *t;
int error = 0;
void usage(const char *nom)
{
fprintf(stderr, "\nUsage : %s [-e expression] [fichier...]\n\n", nom);
exit(1);
}
int type_param (char *p)
{
if (strcmp(p,OPTION_EXPR) == 0)
return TYPE_OPTION;
else
return TYPE_FICHIER;
}
double eval(char *line);
void ouvrir (char *nom)
{
FILE *fichier;
char carlu;
char expression [MAXPILE];
int i=0;
//strcat(fichier,".txt");
//printf("nom du fichier : %s\n",nom);if ((fichier
fopen(nom,"r")) NULL )
{
printf("\nAucun fichier du nom de : %s\n",nom);
}
else
{
while (!feof(fichier))
{
carlu=fgetc(fichier);
expression[i]=carlu;
i++;
if (carlu == '\n')
{
expression[i-1]='\0';
printf("\n%s = %g",expression,eval(expression));
i=0;
}
}
fclose(fichier);
}
}
typedef struct TPILE
{
int Type;
int PosDeb, PosFin;
} TPILE;
TPILE Pile[MAXPILE];
double scan_sum();
double scan_factor()
{
double result;
int n;
if ((*t=='.' && isdigit(*(t+1))) || isdigit(*t)) /* c'est un nombre */
{
sscanf(t,"%lf%n",&result,&n);
t+=n;
}
else if(*t=='-') /* il faut trouver l'opposé */
{
t++;
result = -scan_factor();
}
else if(*t=='(') /* début de parenthèses */
{
t++;
result = scan_sum();
if (*t!=')')
{
printf("erreur parenthese non fermee\n");
error = 1;
}
else t++;
}
return result;
}
/*double scan_power()
{
double result = scan_factor();
if (*t=='^')
{
t++;result
pow(result,scan_factor()); /* result result^scan_factor()
}
return result;
}*/
double scan_prod()
{
double result = scan_factor();
while(1)
{
if (*t == '*')
{
t++;result *
scan_factor(); /* result result * scan_power() */
}
else if (*t == '/')
{
t++;result /
scan_factor(); /* result result / scan_power() */
}
else break;
}
return result;
}
double scan_sum()
{
double result = scan_prod();
while (1){
if (*t == '+')
{
t++;result +
scan_prod(); /* result result + scan_prod() */
}
else if (*t == '-')
{
t++;result -
scan_prod(); /* result result - scan_prod() */
}
else break;
}
return result;
}
double eval(char *line)
{
t = line;
return scan_sum();
}
int main(int argc, char *argv[])
{
int i=0;
//char line[200];
if (argc == 1)
usage(argv[0]);
else
if ((argc == 2) && (type_param(argv[1])==TYPE_OPTION))
usage(argv[0]);
if ((argc == 3) && (type_param(argv[1])==TYPE_OPTION))
printf("\n%s = %g\n\n",argv[2],eval(argv[2]));
if ((argc >= 2) && (type_param(argv[1])==TYPE_FICHIER))
{
for(i=1;i<argc;i++)
ouvrir(argv[i]);
//eval(argv[i]);
printf("\n");
}
}
-------------------------------
Toutes aides ou solutions seront les bienvenues
Merci d'avance
20syl
Afficher la suite