Erreur dans fonction

Fermé
anthony - 30 janv. 2010 à 15:56
 anthony - 30 janv. 2010 à 22:02
Bonjour,
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:

3 réponses

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
30 janv. 2010 à 16:13
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!!
@+
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
30 janv. 2010 à 16:17
T'as été plus rapide que moi ^^.
Par contre c'est plutôt char nom[31] qu'il faut utiliser dans son cas.

Cdlt,
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
30 janv. 2010 à 16:20
Yes...le zero final...tendance à l'oublier..;)
Et pour le &, ta remarque est nécessaire!!;)
@+
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
30 janv. 2010 à 16:14
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,
0
ah ok mais la structure sera global alors ?? ah moin que sa ne marche pas comme les variable ??
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > anthony
30 janv. 2010 à 16:45
Elle ne sera pas globale, elle aura pour portée le fichier. Et c'est ce qu'il faut puisque tu l'utilises dans les déclarations d'autres fonctions du fichier.
0
anthony > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
30 janv. 2010 à 16:48
ah ok, mais imaginons que je veux la mettre dans la fonction main dans ce cas je pourrais plus la passer a la fonction ??
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844 > anthony
30 janv. 2010 à 17:11
Si ta structure n'est utilisée que dans ta fonction, oui tu peux laisser la définition du type dedans.
0
anthony > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
30 janv. 2010 à 18:09
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
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 ?
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
30 janv. 2010 à 16:37
Salut,
ben dans ce cas oui....
@+
0