Petit problème surement de pointeur

mickmac Messages postés 447 Statut Membre -  
totof31 Messages postés 165 Statut Membre -
Bonjour,
Voilà j'ai une fonction qui en utilise une autre
voila la fonction utilisée
float add(int x,int y)
{

return x+y;

}

Et dans ma fonction main j'ai mis
int x;
int y;
float a;
printf("entrer votre valeur de x\n");
scanf("%d",&x);
printf("entrer votre valeur de y\n");
scanf("%d",&y);

a=add(x,y);printf("le résultat est %f \n",a);

Et quand j'exécute après compilation la fonction main et que j'utilise le add, il me renvoit non pas le résultat, mais il me renvoit x comme ci y était égal à zéro(d'ailleurs la multiplication donne zéro)
Pourquoi??

Merci de votre aide

3 réponses

totof31 Messages postés 165 Statut Membre 74
 
Salut,
Ca dépend du compilo. Il est possible que stdin contienne le retour à la ligne de la saisie précédente, il faut alors flusher stdin, par ex :

char c;
while ((c = getchar()) != '\n' && c != EOF);
0
mickmac Messages postés 447 Statut Membre 6
 
Oulà j'ai pas vu ça on a pas appris. D'ailleur je comprend rien
0
totof31 Messages postés 165 Statut Membre 74
 
ce code lit l'entrée standard, un caractère à la fois, jusqu'à trouver un retour à la ligne (\n) ou la fin du buffer (EOF)
0
mickmac Messages postés 447 Statut Membre 6
 
et il faut que je le écrive ou ça ?
merci encore
0
totof31 Messages postés 165 Statut Membre 74
 
entre le 1er et le 2d scanf
0
mickmac Messages postés 447 Statut Membre 6
 
ok merci beaucoup je vais assayer ça
0
mickmac Messages postés 447 Statut Membre 6
 
float sub(int x,int y) 
{ 
return x-y; 

} 



float mult(int x,int y) 
{ 

return x*y; 
} 



float add(int x,int y) 
{ 


return (x+y); 

} 



float div(int x,int y) 
{ 
return x/y; 

} 



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


int main() 
{ 
int x; 
int y; 
float a; 
float b; 
float c; 
float d; 
char cas=1; 
do 
{ 
printf("entrer votre valeur de x\n"); 
scanf("%d",&x); 
printf("entrer votre valeur de y\n"); 
scanf("%d",&y); 


printf("rentrer 1 si vous voulez la somme, 2 pour la soustraction, 3 pour la multiplication, 4 pour la dvision et 0 si vous voulez arrété\n"); 
scanf("%d",&cas); 
switch(cas) 
{ 
case 0 :; break; 
case 1 : a=add(x,y);printf("le résultat est %f \n",a);break; 
case 2 : b=sub(x,y);printf("le résultat est %f \n",b); break; 
case 3 :c=mult(x,y);printf("le résultat est %f \n",c); break; 
case 4 : d=div(x,y);printf("le résultat est %f \n",d); break; 
default : printf("erreur, rentrer 0, 1,2,3 ou 4\n"); break; 
} 
} 
while(cas!=0); 
return 0; 
} 

0
totof31 Messages postés 165 Statut Membre 74
 
Il y a déjà un soucis avec
scanf("%d",&cas);

%d correspond à un entier (4 octets)
cas est un char (1 octet)
==> débordement !
0
mickmac Messages postés 447 Statut Membre 6
 
ça prend de la place pour rien non c'est ça? Car quand j'éxécute ça fonctionne ça
0
totof31 Messages postés 165 Statut Membre 74
 
ça fonctionne peut-être mais ça écrase d'autres données en mémoire : avec le %d, tu dis à scanf de ranger le chiffre saisi dans un int, mais en paramètre, tu donnes un char. Ainsi, scanf écrit bien dans le char, mais il écrit aussi (à priori des zéros) en mémoire, à des adresses invalides (le C ne fait pas le contrôle pour toi !)
0