Fonctions et calculatrice en C

Résolu
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   -  
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j'ai fait une calculatrice avec des fonctions en c (avec les pointeurs) et elle fonctionne.

J'ai essayé d'en faire une autre sans pointeur et la ça pose problème..
Voici mon code ;


   #include <stdio.h>
#include <stdlib.h>


/* fonction calcul 1*/
int calcul(int n)
{
printf("\n entrez un nombre : ");
scanf("%d", n);

return n;
}
/*fonction de l'operateur*/
char operateur(char op)
{
printf("\nentrez l'operateur : ");
scanf(" %c", op);

return op;
}


int main(int argc, char *argv[])
{
 int n,n1,n2,r,choix;
char op; 

do
{ 

printf("-1- CALCULATRICE \n\n\n");
printf("-0- FIN DE PROGRAMME \n\n\n");

printf("votre choix===========>");
scanf("%d", &choix);
switch(choix)
{
case 1:
     {
     n1=calcul( n);
     operateur( op);
     n2=calcul( n);
     }

     
     if (op=='+')
     {
     r=n1+n2;
     printf("\n%d\n\n", r);
     }
    
     if 
     (op=='-')
     {
     r=n1-n2;
     printf("\n%d\n", r);
     }
     
     if 
     (op=='/')
     {
     r=n1/n2;
     printf("\n%d\n", r);
     }
     
     if 
     (op=='*')
     {
     r=n1*n2;
     printf("\n%d\n", r);
     }
     
default :
      if (choix > 1)  
     printf("\n\n mauvais choix!!!\n\n\n");
     break;
    
    
}

}
     

while(choix!=0);
  system("PAUSE");     
  return 0;
}       

si quelqu'un peut m'expliquer mon erreur...

Merci d'avance
A voir également:

7 réponses

reltak Messages postés 261 Date d'inscription   Statut Membre Dernière intervention   41
 
Salut

 /* fonction calcul 1*/
int calcul(int n)
{
printf("\n entrez un nombre : ");
scanf("%d", n)


D'abord la syntaxe du scanf n'est pas correcte !

c'est scanf("%d", &n) avec le et commercial devant le nom de variable il s'agit de remplir une zone mémoire ^^

Peux-tu expliquer pourquoi ta fonction calcul a un paramètre ??
Il sert à rien puisque ta fonction RETOURNE le nombre n ^^

Et dans ton main tu fais juste n1 = calcul();

NB: pour le scanf de l'opérateur, normalement ya pas besoin du et commercial :P

Voilà c'est tout ce que je vois

++
Reltak
0
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
re,

j'ai changer ce que tu m'as dit mais le calcul ne fonctionne toujours pas.
Il m'affiche bien d'entrez les deux nombres et l'opérateur et puis ça s'arrete la...

Je remet mon code pour visulaliser l'erreur si quelqd'un la trouve!!!
Merci

   #include <stdio.h>
#include <stdlib.h>


/* fonction calcul 1*/
int calcul()
{
int n;
printf("\n entrez un nombre : ");
scanf("%d", &n);

return n;
}
/*fonction de l'operateur*/
char operateur(char op)
{
printf("\nentrez l'operateur : ");
scanf(" %c", &op);

return op;
}


int main(int argc, char *argv[])
{
 int n1,n2,r,choix;
char op; 

do
{ 

printf("-1- CALCULATRICE \n\n\n");
printf("-0- FIN DE PROGRAMME \n\n\n");

printf("votre choix===========>");
scanf("%d", &choix);
switch(choix)
{
case 1:
     {
     n1=calcul( );
     operateur( op);
     n2=calcul( );
     }

     
     if (op=='+')
     {
     r=n1+n2;
     printf("\n%d\n\n", r);
     }
    
     if 
     (op=='-')
     {
     r=n1-n2;
     printf("\n%d\n", r);
     }
     
     if 
     (op=='/')
     {
     r=n1/n2;
     printf("\n%d\n", r);
     }
     
     if 
     (op=='*')
     {
     r=n1*n2;
     printf("\n%d\n", r);
     }
     
default :
      if (choix > 1)  
     printf("\n\n mauvais choix!!!\n\n\n");
     break;
    
    
}

}
     

while(choix!=0);
  system("PAUSE");     
  return 0;
}       

0
reltak Messages postés 261 Date d'inscription   Statut Membre Dernière intervention   41
 
Même donne pour la fonction operateur

Le paramètre ne sert à rien car tu le renvoie. Donc tu enlève le paramètre
et tu fais op = operateur(); dans ton main.

Normalement ca devrait mieux marcher :P

Et sinon est-ce qu'il y a un message d'erreur ou est-ce qu'il sort directement ?
Tu développes avec quoi ??

Donne un peu de détails STP

Reltak.
0
reltak Messages postés 261 Date d'inscription   Statut Membre Dernière intervention   41
 
Je me permets de me répondre car j'ai vu une anomalie dans ton switch...

tu fais

switch(choix)
{
   case 1:
  {
       ...
  }
  // et tu fais tes opérations ici
}


Il faut faire les opérations à l'intérieur du bloc du (case 1) et ne pas oublier l'instruction break; à la fin.
0
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
Voilà mon code avec tes suggestions mais sans les break , il fonctionne et je
ne vois pas pourquoi non plus...
Si tu as des explications je suis preneur...( Je débute en c)...

Merci pour ta patience!!!
#include <stdio.h>
#include <stdlib.h>


/* fonction calcul 1*/
int calcul()
{
int n;
printf("\n entrez un nombre : ");
scanf("%d", &n);

return n;
}
/*fonction de l'operateur*/
char operateur()
{
char ope;
printf("\nentrez l'operateur : ");
scanf(" %c", &ope);

return ope;
}


int main(int argc, char *argv[])
{
int n1,n2,r,choix;
char op;

do
{

printf("-1- CALCULATRICE \n\n\n");
printf("-0- FIN DE PROGRAMME \n\n\n");

printf("votre choix===========>");
scanf("%d", &choix);
switch(choix)
{
case 1:
{
n1=calcul( );
op=operateur( );
n2=calcul( );
}



if (op=='+')
{
r=n1+n2;
printf("\n%d\n\n", r);
}

if
(op=='-')
{
r=n1-n2;
printf("\n%d\n", r);
}

if
(op=='/')
{
r=n1/n2;
printf("\n%d\n", r);
}

if
(op=='*')
{
r=n1*n2;
printf("\n%d\n", r);
}

default :
if (choix > 1)
printf("\n\n mauvais choix!!!\n\n\n");
break;


}

}


while(choix!=0);
system("PAUSE");
return 0;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
reltak Messages postés 261 Date d'inscription   Statut Membre Dernière intervention   41
 
     #include <stdio.h>
#include <stdlib.h>


/* fonction calcul 1*/
int calcul()
{
	int n;
	printf("\n entrez un nombre : ");
	scanf("%d", &n);

	return n;
}

/*fonction de l'operateur*/
char operateur()
{
	char ope;
	printf("\nentrez l'operateur : ");
	scanf(" %c", &ope);
	
	return ope;
}


int main(int argc, char *argv[])
{
	int n1,n2,r,choix;
	char op;

do
{

	printf("-1- CALCULATRICE \n\n\n");
	printf("-0- FIN DE PROGRAMME \n\n\n");

	printf("votre choix===========>");
	scanf("%d", &choix);
	switch(choix)
	{
		
		case 1:
		{
			n1=calcul( );
			op=operateur( );
			n2=calcul( );
		

			if (op=='+')
			{
				r=n1+n2;
				printf("\n%d\n\n", r);
			}
	
			if(op=='-')
			{
				r=n1-n2;
				printf("\n%d\n", r);
			}
	
			if(op=='/')
			{
				r=n1/n2;
				printf("\n%d\n", r);
			}
	
			if(op=='*')
			{
				r=n1*n2;
				printf("\n%d\n", r);
			}

			break;
		}
	
		default :
			if (choix > 1)
				printf("\n\n mauvais choix!!!\n\n\n");
			break;

}

}


while(choix!=0);
system("PAUSE");
return 0;
}


Ce code devrait fonctionner paske avec ton code quand tu appuies sur 1 il fait juste les trois initialisations !
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut

Sinon à la place de n1=..., op=operateur(). etc.
Tu peux mettre tout simplement : scanf("%d%c%d",&n1,&op,&n2);
Ainsi l'utilisateur pourra écrire directement son opération : 5+7 et valider.

Cordialement
0
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
Merci à tout le monde pour vos réponses!!!
0