[C] Problèmes Fonctions & Structures
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour a tous
Je débute en programmation et je m'interesse au langage C.
J'ai "programmé" un petit programme qui fait des divisions euclidiennes.
J'ai réussi à le faire sans fonctions, mais je voudrais le faire avec une fonction.
Résumé du programme :
- Initialisation de "x", "y", et la structure "calcul" de type "EUCL"
- La structure "EUCL" a 2 composantes : "result" et "reste"
- L'utilisateur entre les 2 nombres de départ (x et y)
- "x", "y" et "calcul" sont envoyés à la fonction "division_eucl".
- La fonction "division_eucl" fait les calculs, puis renvoie la structure (qui contient "result" et "reste").
- On affiche les resultats
Mais j'ai quelques erreurs quand je debug :
Voici mon code :
main.c
main.h
Auriez-vous une idée pour résoudre ce problème ?
Je code sous Code::Blocks
Merci d'avance
Bye
Je débute en programmation et je m'interesse au langage C.
J'ai "programmé" un petit programme qui fait des divisions euclidiennes.
J'ai réussi à le faire sans fonctions, mais je voudrais le faire avec une fonction.
Résumé du programme :
- Initialisation de "x", "y", et la structure "calcul" de type "EUCL"
- La structure "EUCL" a 2 composantes : "result" et "reste"
- L'utilisateur entre les 2 nombres de départ (x et y)
- "x", "y" et "calcul" sont envoyés à la fonction "division_eucl".
- La fonction "division_eucl" fait les calculs, puis renvoie la structure (qui contient "result" et "reste").
- On affiche les resultats
Mais j'ai quelques erreurs quand je debug :
main.h|11|warning: parameter names (without types) in function declaration| main.c||In function `division_eucl':| main.c|24|error: request for member `result' in something not a structure or union| main.c|25|error: request for member `reste' in something not a structure or union| ||=== Build finished: 2 errors, 1 warnings ===|
Voici mon code :
main.c
#include <stdio.h> #include <stdlib.h> #include "main.h" int main() { double x=0, y=0; EUCL calcul = {0}; system ("cls"); printf ("\nPremier nombre : "); scanf ("%lf", &x); printf ("\nDeuxieme nombre : "); scanf ("%lf", &y); division_eucl(x,y,calcul); printf ("\n%lf / %lf = %lf\nReste : %ld\n\n\n", x, y, calcul.result, calcul.reste); system ("pause"); return 0; } double division_eucl(x,y,calcul) { calcul.result = x / y; calcul.reste = x % y; return (calcul); }
main.h
typedef struct EUCL EUCL; struct EUCL { double result; long reste; }; double division_eucl(x,y,calcul);
Auriez-vous une idée pour résoudre ce problème ?
Je code sous Code::Blocks
Merci d'avance
Bye
A voir également:
- [C] Problèmes Fonctions & Structures
- Codes secrets Android : accéder aux fonctions cachées - Guide
- Fonctions excel en anglais - Guide
- Fonctions excel - Guide
- Fonction puissance c++ - Forum C++
- Aucun groupe de fonctions ni onglet n'est actuellement chargé dans le ruban - Forum Word
9 réponses
Je sens que tu débutes comme moi avec le tutoriel sur le Site du Zéro!! N'est-ce pas?
Bref...je comprend pas pourquoi tu écris ça : #include "main.h"
pourrais-tu m'expliquer?
Bref...je comprend pas pourquoi tu écris ça : #include "main.h"
pourrais-tu m'expliquer?
Salut,
voici quelques commentaires:
J'espere ca pourra t'aider!!
@+
voici quelques commentaires:
int main() { double x=0, y=0; EUCL calcul ; system ("cls"); printf ("\nPremier nombre : "); scanf ("%lf", &x); printf ("\nDeuxieme nombre : "); scanf ("%lf", &y); //passage par reference de ta structure division_eucl(x,y,&calcul); printf ("\n%lf / %lf = %lf\nReste : %ld\n\n\n", x, y, calcul.result, calcul.reste); system ("pause"); return 0; } //tu n'a pas besoin de retour car tu passe ta structure en argument void division_eucl(double x,double y,EUCL*calcul) //double division_eucl(x,y,calcul) { calcul->result = x / y; calcul->reste = x % y; // return (calcul); } Main.h typedef struct EUCL EUCL; struct EUCL { double result; long reste; }; void division_eucl(double,double,EUCL*);
J'espere ca pourra t'aider!!
@+
Salut,
C'est pour ajouter à mon projet le fichier Header qui contient le prototype de ma fontion et ma structure.
#include "main.h"
C'est pour ajouter à mon projet le fichier Header qui contient le prototype de ma fontion et ma structure.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai modifié mon code, voila le fichier "main.c" :
J'ai aussi modifié le prototype de ma fonction dans le fichier ".h"
Mais il y a encore un problème, lorsque je debug mon programme :
A cette ligne :
Code::Blocks m'affiche cette erreur :
Vous avez une idée ?
Merci d'avance
Bye
#include <stdio.h> #include <stdlib.h> #include "main.h" int main() { double x=0, y=0; EUCL calcul = {0}; system ("cls"); printf ("\nPremier nombre : "); scanf ("%lf", &x); printf ("\nDeuxieme nombre : "); scanf ("%lf", &y); division_eucl(x,y,&calcul); // Passage par reference de la structure printf ("\n%lf / %lf = %lf\nReste : %ld\n\n\n", x, y, calcul.result, calcul.reste); system ("pause"); return 0; } void division_eucl(double x,double y,EUCL*calcul) //Pas besoin de retour car la structure est en argument. { calcul->result = x / y; calcul->reste = x % y; }
J'ai aussi modifié le prototype de ma fonction dans le fichier ".h"
Mais il y a encore un problème, lorsque je debug mon programme :
A cette ligne :
calcul->reste = x % y;
Code::Blocks m'affiche cette erreur :
main.c|25|error: invalid operands to binary %|
Vous avez une idée ?
Merci d'avance
Bye
En fait, j'ai réussi a contourné le problème grâce à la fonction "fmod" de <math.h>.
Pour ceux qui sont interessés, voici le code final :
main.c
main.h
Merci encore Chuka pour ton aide =)
Bye
Pour ceux qui sont interessés, voici le code final :
main.c
#include <stdio.h> #include <stdlib.h> #include <math.h> #include "main.h" int main() { double x=0, y=0; EUCL calcul = {0}; system ("cls"); printf ("\nPremier nombre : "); scanf ("%lf", &x); printf ("\nDeuxieme nombre : "); scanf ("%lf", &y); division_eucl(x,y,&calcul); // Passage par reference de la structure printf ("\n%lf / %lf = %ld\nReste : %ld\n\n\n", x, y, calcul.result, calcul.reste); system ("pause"); return 0; } void division_eucl(double x,double y,EUCL*calcul) //Pas besoin de retour car la structure est en argument. { calcul->result = x / y; calcul->reste = fmod(x,y); }
main.h
typedef struct EUCL EUCL; struct EUCL { long result; long reste; }; void division_eucl(double x,double y,EUCL*calcul); double fmod(double,double);
Merci encore Chuka pour ton aide =)
Bye
Salut,
J'arrive un peu tard.
Effectivement tu devais utiliser fmod puisque x et y ne sont pas des entiers.
Sinon juste une petite correction :
printf ("\n%lf / %lf = %ld\nReste : %ld\n\n\n", x, y, calcul.result,
Il faut mettre %f dans printf et non %lf.
// Passage par reference de la structure
N'oublie pas qu'en C il n'y a pas de passage par référence. Ici tu as fait un passage par adresse.
Cdlt
J'arrive un peu tard.
Effectivement tu devais utiliser fmod puisque x et y ne sont pas des entiers.
Sinon juste une petite correction :
printf ("\n%lf / %lf = %ld\nReste : %ld\n\n\n", x, y, calcul.result,
Il faut mettre %f dans printf et non %lf.
// Passage par reference de la structure
N'oublie pas qu'en C il n'y a pas de passage par référence. Ici tu as fait un passage par adresse.
Cdlt
Ok merci =)
Je vais poser une question idiote, mais pourquoi je doit mettre "%f" ? Et pas "%lf" ?
Je vais poser une question idiote, mais pourquoi je doit mettre "%f" ? Et pas "%lf" ?