Déclaration de structures
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Déclaration de structures



  1. #1
    FBMeca

    Déclaration de structures


    ------

    Bonjour à tous,

    J'essaie de créer une fonction qui reçoit en argument une structure du type s_point et qui en affiche le contenu sous la forme:

    point ... de coordonnées ... ... . Il me dit la chose suivante, mais je ne comprends pas quels sont les problèmes...

    "52.c:17:9: error: argument type 'struct s_point' is incomplete
    affiche(p) ;
    ^
    52.c:3:21: note: forward declaration of 'struct s_point'
    void affiche(struct s_point p) ;
    ^
    52.c:26:6: error: conflicting types for 'affiche'
    void affiche(struct s_point p) {
    ^
    52.c:3:6: note: previous declaration is here
    void affiche(struct s_point p) ;


    Voici le code :

    Code:
    #include <stdio.h>
    
    void affiche(struct s_point p) ;
    
    struct s_point {
        char c ;
        int x, y ;
    } ;
    
    int main() {
    
    struct s_point p ;
    p.c = 'A' ;
    p.x = 10 ;
    p.y = 12 ;
    
    affiche(p) ;
    
    return 0 ;
    
    }
    
    // ------------------------------------
    
    
    void affiche(struct s_point p) {
        printf("point %c de coordonnées %d %d", p.c, p.x, p.y) ;
    }
    Merci d'avance!

    -----

  2. #2
    albanxiii
    Modérateur

    Re : Déclaration de structures

    Bonjour,

    Vous utilisez la structure struct s_point dans le prototype de la fonction affiche avant de l'avoir défini. Placez la définition de la structure avant (et chez moi ça compile et s'exécute correctement).
    Not only is it not right, it's not even wrong!

  3. #3
    FBMeca

    Re : Déclaration de structures

    Ahhh oui merci beaucoup, c'est plus logique comme ceci, et ça fonctionne parfaitement

    En lien avec ce même problème, j'ai essayé de faire une autre chose ; Cette structure s_point représente un point dans le plan, et je souhaite créer un tableau (nommé courbe) de "len" points. J'aimerais ensuite que l'utilisateur rentre ces divers points, et ma fonction "affiche" devra ensuite les afficher. Malheureusement, je n'y arrive pas tout à fait... Le compilateur me renvoie ceci, mais je ne comprends pas ce qu'il veut réellement me dire :

    55.c:10:43: error: expected ')'
    void affiche(struct s_point courbe[], int len) ;
    ^
    55.c:3:13: note: expanded from macro 'len'
    #define len 2
    ^
    55.c:10:13: note: to match this '('
    void affiche(struct s_point courbe[], int len) ;
    ^
    55.c:34:43: error: expected ')'
    void affiche(struct s_point courbe[], int len) {
    ^
    55.c:3:13: note: expanded from macro 'len'
    #define len 2
    ^
    55.c:34:13: note: to match this '('
    void affiche(struct s_point courbe[], int len) {
    ^
    55.c:34:43: error: parameter name omitted
    void affiche(struct s_point courbe[], int len) {
    ^
    55.c:3:13: note: expanded from macro 'len'
    #define len 2

    Voici mon code :

    Code:
    #include <stdio.h>
    
    #define len 10
    
    struct s_point {
        char c ;
        int x, y ; 
    } ;
    
    void affiche(struct s_point courbe[], int len) ;
    
    int main() {
    
    int i ;
    
    struct s_point courbe[len] ;
    
    for (i=0 ; i<len ; i++) {
        printf("Lettre: \n") ;
        scanf("%c", &courbe[i].c) ;
        printf("Coordonnée x: \n") ;
        scanf("%d", &courbe[i].x) ;
        printf("Coordonnée y: \n") ;
        scanf("%d", &courbe[i].y) ;
    }
    
    affiche(courbe, len) ;
    
    return 0 ;
    }
    
    // fonction
    
    void affiche(struct s_point courbe[], int len) {
        int i ;
        for (i=0 ; i<len ; i++) {
            printf("point %c de coordonnées %d %d", courbe[i].c, courbe[i].x, courbe[i].y) ;
        }
    }
    Dernière modification par FBMeca ; 13/04/2020 à 14h42.

  4. #4
    Ikhar84
    Animateur Informatique

    Re : Déclaration de structures

    Salut,

    Ta "macro" len (ton #define) et le paramètre len de ta fonction portent le même nom.

    C'est pour cela qu'on utilise des artifices comme les constantes en majuscule, ou encore en préfixant ton nom avec un underscore (caractère de soulignement):
    Code:
    #define LEN 10 
    //ou
    #define _LEN 10
    Regardes du côté des conventions de nommage des constantes et des directives du prépocesseur.
    J'ai glissé Chef !

  5. A voir en vidéo sur Futura
  6. #5
    FBMeca

    Re : Déclaration de structures

    Ah oui, je vois, merci beaucoup ! Maintenant mon programme compile parfaitement, mais il me reste un problème ; D'abord il me demande la première lettre, je la rentre, et je mets les coordonnées en x et en y. Par contre, quand je presse "enter" après avoir rentré la coordonnée en y, il saute le scan de la deuxième lettre..
    C'est sûrement parce qu'il pense que le "enter" est le caractère que je veux rentrer ? Comment remédier à ce problème ?

    Merci encore pour votre aide
    Dernière modification par FBMeca ; 13/04/2020 à 17h45.

  7. #6
    Jack
    Modérateur

    Re : Déclaration de structures

    Tu ajoutes
    Code:
    do {
           c = getchar(); 
    } while (c != '\n' && c != EOF);
    après ton dernier scanf pour vider le buffer clavier.
    PS : et avoir au préalable déclaré la variable c.
    Dernière modification par Jack ; 13/04/2020 à 18h42.

  8. #7
    FBMeca

    Re : Déclaration de structures

    Est-ce qu'il y aurait une méthode plus banale ? Que signifie EOF ?

  9. #8
    Ikhar84
    Animateur Informatique

    Re : Déclaration de structures


    End Of File...


    Un autre moyen de vider le buffer ?
    Tu as fflush(stdin) qui est tellement déconseillé que je n'aurais même pas du t'en parler ...
    Dernière modification par Ikhar84 ; 13/04/2020 à 20h39.
    J'ai glissé Chef !

  10. #9
    FBMeca

    Re : Déclaration de structures

    Merci ! Je vais approfondir mes connaissances dans tout ça, parce que j'ai l'impression qu'avec les outils que j'ai, il n'y pas vraiment de moyen simple pour contourner ce problème.
    Ou bien quelqu'un a une autre solution miracle ?

  11. #10
    pm42

    Re : Déclaration de structures

    Citation Envoyé par FBMeca Voir le message
    Merci ! Je vais approfondir mes connaissances dans tout ça, parce que j'ai l'impression qu'avec les outils que j'ai, il n'y pas vraiment de moyen simple pour contourner ce problème.
    Ou bien quelqu'un a une autre solution miracle ?
    Si 2 lignes de code te semblent trop compliquées, que tu cherches une solution miracle et que tu n'as pas le réflexe face à quelque chose que tu ne connais pas comme EOF de lire la doc plutôt que de demander, tu vas progresser très lentement en programmation.

  12. #11
    Jack
    Modérateur

    Re : Déclaration de structures

    Ca n'est pas si contraignant: tu peux tout mettre sur une ligne si tu veux. Voire en faire une macro.

  13. #12
    Ikhar84
    Animateur Informatique

    Re : Déclaration de structures

    J'ai pas osé proposer la macro ... pour 2 lignes...
    J'ai glissé Chef !

  14. #13
    FBMeca

    Re : Déclaration de structures

    Si 2 lignes de code te semblent trop compliquées, que tu cherches une solution miracle et que tu n'as pas le réflexe face à quelque chose que tu ne connais pas comme EOF de lire la doc plutôt que de demander, tu vas progresser très lentement en programmation.
    Je comprends que mon message te frustre, mais il ne faut pas le voir ainsi. Je suis étudiant, je vois que certains chapitres ont été mis de côté, et se documenter pour des choses que je n'aurais pas du voir s'avère souvent être une idée malheureuse. Par ailleurs, bien sûr que je vais me documenter, ça m'intéresse tout ça, mais peut-être qu'il aurait été intéressant de voir si avec MES notions, on aurait pu résoudre ce problème ?
    Par ce message, je vais partir du principe que la réponse est non.

    Merci pour votre aide !
    Dernière modification par FBMeca ; 14/04/2020 à 08h29.

Discussions similaires

  1. Tp c++ : structures et tableau des structures
    Par invite07b57e15 dans le forum Programmation et langages, Algorithmique
    Réponses: 6
    Dernier message: 01/02/2016, 10h22
  2. Mécanique des structures / structures en nid d'abeille
    Par invited4743cb4 dans le forum TPE / TIPE et autres travaux
    Réponses: 3
    Dernier message: 12/10/2015, 08h12
  3. Déclaration en C
    Par Dlzlogic dans le forum Programmation et langages, Algorithmique
    Réponses: 10
    Dernier message: 27/02/2013, 16h43
  4. C : Initialisation de structures/tableaux de structures
    Par invitef1d0ad93 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 12/08/2008, 11h57