Erreur dans fonction
anthony
-
anthony -
anthony -
Bonjour,
alors voila un code ou j'ai 2 erreur mais je ne les comprends pas
et voici les erreur qu'il me dise :
alors voila un code ou j'ai 2 erreur mais je ne les comprends pas
/* Transmission d'une structure a une fonction */
#include <stdio.h>
#include <stdlib.h>
/*prototype de fonction */
void fonction_don(struct data donneur);
main(void)
{
/*déclaration de la structure */
struct data{
float montant;
char nom;
char prenom;
} donneur;
puts("Entrez le nom est prénom du donnateur :");
scanf("%30s %30s", &donneur.nom, &donneur.prenom);
printf("Entrez le montant du don:");
scanf("%f", &donneur.montant);
fonction_don(donneur);
return 0;
}
void fonction_don(struct data donneur)
{
printf("le donneur est %s %s: et son montant est %f\n", donneur.nom, donneur.prenom, donneur.montant);
}
et voici les erreur qu'il me dise :
C:\Users\Anthony\Documents\test\main.c|6|warning: "struct data" declared inside parameter list| C:\Users\Anthony\Documents\test\main.c|6|warning: its scope is only this definition or declaration, which is probably not what you want| C:\Users\Anthony\Documents\test\main.c|6|warning: parameter has incomplete type| C:\Users\Anthony\Documents\test\main.c|9|warning: return type defaults to `int'| C:\Users\Anthony\Documents\test\main.c||In function `main':| C:\Users\Anthony\Documents\test\main.c|23|error: type of formal parameter 1 is incomplete| C:\Users\Anthony\Documents\test\main.c|27|warning: "struct data" declared inside parameter list| C:\Users\Anthony\Documents\test\main.c|28|error: parameter `donneur' has incomplete type| ||=== Build finished: 2 errors, 5 warnings ===|
A voir également:
- Erreur dans fonction
- Fonction si et - Guide
- Erreur upes 1025 - Forum Téléviseurs
- Erreur t32 ✓ - Forum Livebox
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Fonction remplacer dans word - Guide
3 réponses
Salut,
Si tu veux utlisé ta structure dans ta fonction, il faut que ta fonction "connaisse" la structure..
Or la portée de ta structure est la fonction main()...
Il faudrait la declarer avant ta foncton
struct data{
float montant;
char nom;
char prenom;
} donneur;
void fonction_don(struct data donneur);
main(void)
.....
D'autre part, dans ta structure Nom et Prenom sont des char alors que, d'apres ce que je comprends, cela devrait être des tableaux de char....
struct data{
float montant;
char nom[30];
char prenom[30];
} donneur;
j'espere ca pourra t'aider!!
@+
Si tu veux utlisé ta structure dans ta fonction, il faut que ta fonction "connaisse" la structure..
Or la portée de ta structure est la fonction main()...
Il faudrait la declarer avant ta foncton
struct data{
float montant;
char nom;
char prenom;
} donneur;
void fonction_don(struct data donneur);
main(void)
.....
D'autre part, dans ta structure Nom et Prenom sont des char alors que, d'apres ce que je comprends, cela devrait être des tableaux de char....
struct data{
float montant;
char nom[30];
char prenom[30];
} donneur;
j'espere ca pourra t'aider!!
@+
Bonjour,
Tu as déclaré ta structure data à l'intérieur de ta fonction main, et tu l'utilises à l'extérieur. D'où le message. Sors plutôt la déclaration de data et mets-la après les #define. Et tout devrait rentrer dans l'ordre.
Par contre, tu as d'autres problèmes : nom et prenom sont de type char, et tu les utilises comme des chaînes de caractères. Pour définir des chaînes de caractères, il faut les déclarer comme : char nom[31] et char prenom[31] par exemple.
scanf("%30s %30s", &donneur.nom, &donneur.prenom);
Si donneur.nom et donneur.prenom sont de type tableau de char, il faudra enlever l'esperluette (&) devant donneur.nom ainsi que donneur.prenom
main(void)
Le prototype de main sans argument est : int main (void); (ne pas oublier l'int).
Et enfin, je te conseille de plutôt utiliser des double que des float. Sauf cas très particulier, tu peux oublier les float.
Cdlt,
Tu as déclaré ta structure data à l'intérieur de ta fonction main, et tu l'utilises à l'extérieur. D'où le message. Sors plutôt la déclaration de data et mets-la après les #define. Et tout devrait rentrer dans l'ordre.
Par contre, tu as d'autres problèmes : nom et prenom sont de type char, et tu les utilises comme des chaînes de caractères. Pour définir des chaînes de caractères, il faut les déclarer comme : char nom[31] et char prenom[31] par exemple.
scanf("%30s %30s", &donneur.nom, &donneur.prenom);
Si donneur.nom et donneur.prenom sont de type tableau de char, il faudra enlever l'esperluette (&) devant donneur.nom ainsi que donneur.prenom
main(void)
Le prototype de main sans argument est : int main (void); (ne pas oublier l'int).
Et enfin, je te conseille de plutôt utiliser des double que des float. Sauf cas très particulier, tu peux oublier les float.
Cdlt,
ah ok donc ici comme je l'utilise dans on fonction main et dans la fonction_don je doit mettre la structure globale, et si j'aurais pas mit
dans la fonction main j'aurais pu mettre la structure dans la fonction main en gros c'est ca ?
puts("Entrez le nom est prénom du donnateur :");
scanf("%30s %30s", donneur.nom, donneur.prenom);
printf("Entrez le montant du don:");
scanf("%f", &donneur.montant);
dans la fonction main j'aurais pu mettre la structure dans la fonction main en gros c'est ca ?
Par contre c'est plutôt char nom[31] qu'il faut utiliser dans son cas.
Cdlt,
Et pour le &, ta remarque est nécessaire!!;)
@+