évaluation d'une expression arithmétique

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

4 réponses

  1. Vicking54 Messages postés 95 Statut Membre 26
     
    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
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  3. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  4. bella
     
    merciiii beaucoup pour votre aide ^_^
    0