évaluation d'une expression arithmétique
bella
-
bella -
bella -
Bonjour,
pouvez vous m'aider à corriger mon programme car lorsque je le compile il n'y a pas d'erreurs mais il ne fonctionne pas!! merci
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int calcul(char *buffer);
int main()
{
char A="12+15";
int a ;
a=calcul(A);
printf(a);
return 0;
}
int calcul(char *buffer){
int i=0;
int j=0;
char S1[17],S2[17];
int index_fonction=0;
char fonction;
int resultat=0;
int Nb1=0;
int Nb2=0;
for (i=0;i++;i<17){
if (( buffer[i]=='+') || (buffer[i]=='-') || (buffer[i]=='*') || (buffer[i]=='/' ))
{ fonction=buffer[i];
index_fonction=i;
}
}
for (j=0;j++;j<index_fonction){
S1[j]=buffer[j];
}
for (j=index_fonction+1;j++;j<17)
{
S2[j]=buffer[j];
}
Nb1=atoi(S1);
Nb2=atoi(S2);
if (fonction=='+')
{
resultat=Nb1+Nb2;
}
if (fonction=='-')
{
resultat=Nb1-Nb2 ;
}
if (fonction=='*'){
resultat=Nb1*Nb2 ;
}
if (fonction=='/'){
resultat=Nb1/Nb2 ;
}
return resultat;
}
pouvez vous m'aider à corriger mon programme car lorsque je le compile il n'y a pas d'erreurs mais il ne fonctionne pas!! merci
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int calcul(char *buffer);
int main()
{
char A="12+15";
int a ;
a=calcul(A);
printf(a);
return 0;
}
int calcul(char *buffer){
int i=0;
int j=0;
char S1[17],S2[17];
int index_fonction=0;
char fonction;
int resultat=0;
int Nb1=0;
int Nb2=0;
for (i=0;i++;i<17){
if (( buffer[i]=='+') || (buffer[i]=='-') || (buffer[i]=='*') || (buffer[i]=='/' ))
{ fonction=buffer[i];
index_fonction=i;
}
}
for (j=0;j++;j<index_fonction){
S1[j]=buffer[j];
}
for (j=index_fonction+1;j++;j<17)
{
S2[j]=buffer[j];
}
Nb1=atoi(S1);
Nb2=atoi(S2);
if (fonction=='+')
{
resultat=Nb1+Nb2;
}
if (fonction=='-')
{
resultat=Nb1-Nb2 ;
}
if (fonction=='*'){
resultat=Nb1*Nb2 ;
}
if (fonction=='/'){
resultat=Nb1/Nb2 ;
}
return resultat;
}
4 réponses
-
des erreurs sur le code, après correction de toutes les erreurs et en apportant des améliorations voila un prog fonctionnel
#include <stdio.h> #include <stdlib.h> #include <string.h> int calcul(char *buffer); int main() { char A[20]="30/15"; int a ; a=calcul(A); printf("%d",a); system("PAUSE>nil"); return 0; } int calcul(char *buffer) { int i=0; int j=0; int k = 0; char S1[17],S2[17]; int index_fonction=0; char fonction; int resultat=0; int Nb1=0; int Nb2=0; for (i=0;i<17;i++) { if (( buffer[i]=='+') || (buffer[i]=='-') || (buffer[i]=='*') || (buffer[i]=='/' )) { fonction=buffer[i]; index_fonction=i; } } for (j=0;j<index_fonction;j++) { S1[j]=buffer[j]; } for (j=index_fonction+1;j<17;j++) { S2[k]=buffer[j]; k++; } Nb1=atoi(S1); Nb2=atoi(S2); switch (fonction) { case '+' : resultat=Nb1+Nb2; break; case '-': resultat=Nb1-Nb2 ; break; case '*': resultat = Nb1*Nb2; break; case '/': if (Nb2 == 0) { // Gestion de l'erreur division par 0 resultat = -1; break; } else { resultat = Nb1 / Nb2; break; } } return resultat; } -
Il y a encore quelques cas à gérer, en particulier lorsque la chaîne de caractères se termine ou lorsqu'il n'y a pas d'opérateurs...
J'ai également renommées ou supprimées les variables qui pouvaient l'être afin que le programme soit plus clair...
#include <stdio.h> #include <stdlib.h> #include <string.h> const int nmax=17; int calcul(const char *); int main() { printf("%d\n",calcul("3+2")); // 5 printf("%d\n",calcul("3-2")); // 1 printf("%d\n",calcul("3*2")); // 6 printf("%d\n",calcul("3/2")); // 1 printf("%d\n",calcul("3%2")); // 1 printf("%d\n",calcul("32")); // 32 printf("%d\n",calcul("toto")); // 0 printf("%d\n",calcul("3+2+1")); // 5 return 0; } int calcul(const char *operation) { int index_operateur; char operateur; for (index_operateur=0; index_operateur<nmax; index_operateur++) { operateur = operation[index_operateur]; if (operateur=='+' || operateur=='-' || operateur=='*' || operateur=='/' || operateur=='%' || operateur=='\0') break; } int i; char s1[nmax]; for (i=0; i<index_operateur; i++) s1[i]=operation[i]; s1[i]='\0'; int nb1=atoi(s1); char s2[nmax]; for (i=index_operateur+1; i<nmax; i++) s2[i-index_operateur-1]=operation[i]; s2[i-index_operateur-1]='\0'; int nb2=atoi(s2); switch (operateur) { case '+' : return nb1+nb2; case '-' : return nb1-nb2; case '*' : return nb1*nb2; case '/' : return (nb2==0)? 0 : nb1/nb2; case '%' : return nb1%nb2; case '\0' : return nb1; } } -
Quand tu compiles il n'y a pas d'erreurs ?!
Change de compilateur alors...
Erreur ligne 10 : error C2440: 'initialisation' : impossible de convertir de 'const char [6]' en 'char' Erreur ligne 13 : error C2664: 'calcul' : impossible de convertir le paramètre 1 de 'char' en 'char *' Erreur ligne 14 : error C2664: 'printf' : impossible de convertir le paramètre 1 de 'int' en 'const char *' Avertissements ligne 31, ligne 37, ligne 40 : warning C4552: '<' : opérateur sans effet ; opérateur avec effet secondaire attendu
-