Petit problème surement de pointeur
mickmac
Messages postés
447
Statut
Membre
-
totof31 Messages postés 165 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
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
-
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); -
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; } -
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 !-
-
ç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 !)
-