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