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
A voir également:
- Petit problème surement de pointeur
- Pointeur souris - Guide
- Curseur Windows 10 : comment bien voir la souris à l'écran - Guide
- Petit point vert snap ✓ - Forum Snapchat
- Petit 2 ✓ - Forum Windows
- Point vert sur Snapchat - Forum Snapchat
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);
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 !
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 !)
merci encore