Fonctions et calculatrice en C

Résolu/Fermé
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 7 févr. 2008 à 13:24
limbergh Messages postés 658 Date d'inscription dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 - 7 févr. 2008 à 17:10
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 mercredi 22 août 2007 Statut Membre Dernière intervention 14 janvier 2012 41
7 févr. 2008 à 13:36
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 dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
7 févr. 2008 à 13:44
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 mercredi 22 août 2007 Statut Membre Dernière intervention 14 janvier 2012 41
7 févr. 2008 à 13:49
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 mercredi 22 août 2007 Statut Membre Dernière intervention 14 janvier 2012 41
7 févr. 2008 à 13:51
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 dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
7 févr. 2008 à 13:55
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 mercredi 22 août 2007 Statut Membre Dernière intervention 14 janvier 2012 41
7 févr. 2008 à 14:01
     #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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
7 févr. 2008 à 14:12
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 dimanche 8 juillet 2007 Statut Membre Dernière intervention 29 juin 2010 140
7 févr. 2008 à 17:10
Merci à tout le monde pour vos réponses!!!
0