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