évaluation d'une expression arithmétique

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;
}

4 réponses

  1. merciiii beaucoup pour votre aide ^_^
    0
    1. Modérateur
      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;
      	}
      }
      1
      1. 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; 
        }
        
        1
        1. Modérateur
          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
          0