Passer un tableau de structure en argument d'une fonction en

Résolu/Fermé
Pkavalier Messages postés 8 Date d'inscription vendredi 9 décembre 2022 Statut Membre Dernière intervention 19 mai 2023 - 9 déc. 2022 à 10:25
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 - 12 déc. 2022 à 21:04

Bonjour chers membres. 

Je veux savoir comment passer un tableau de structure en argument d'une fonction.


A voir également:

8 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
9 déc. 2022 à 22:17

Bonjour 

à priori comme un tableau d'autre chose.


1

type ma_fonction(struct ma_structure tableau[]) { ...

Ça serait également utile d'y passer la longueur ...

1
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
10 déc. 2022 à 08:06

Bonjour 

Oui mais seulement s'il code dans un langage dont la syntaxe dérive de C++....

Mais, pas en C, ni en VB, ni en Pascal, ni en Python etc....


D'où mon "à priori" puisqu'il manque cette info essentielle qu'est le langage dans lequel il code...

1
Pkavalier Messages postés 8 Date d'inscription vendredi 9 décembre 2022 Statut Membre Dernière intervention 19 mai 2023 1
10 déc. 2022 à 19:22

J'écris mon programme dans le langage C++


1
mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
12 déc. 2022 à 21:04

Bonjour,

Que tu sois en C ou en C++, tu peux allouer un "tableau" avec malloc de sorte à ce que le bloc alloué contienne n * sizeof(Informations) si tu veux stocker n exemplaires de ta structure. Dans ce cas, il faut passer l'adresse du bloc ainsi alloué ainsi que la valeur n à ta fonction pour qu'elle sache quand s'arrêter. C'est la méthode que propose Pierrot le fou dans son message #2.

#include <stdio.h>
#include <stdlib.h>

typedef struct information_t {
    int id;
} information_t;

void print_informations(information_t * informations, size_t n) {
    size_t i;
    for (i = 0; i < n; i++) {
        printf("%ld\n", informations[i].id);
    }
}

int main() {
    size_t i, n = 5;
    information_t * informations = malloc(sizeof(information_t) * n);
    for (i = 0; i < n; i++) {
        informations[i].id = 10 * i;
    }
    print_informations(informations, n);
    free(informations);
    return 0;         
}

Ensuite, si tu veux quelque chose de plus C++, on utiliserait par exemple la classe std::vector :

#include <iostream>
#include <vector>

struct information_t {
    int id;
    information_t(int id0): 
        id(id0)                                                          
    {}
};                  

void print_informations(const std::vector<information_t> & informations) {
    for (auto & information : informations) {
        std::cout << information.id << std::endl;
    }               
}                   
                    
int main() {
    std::size_t i, n = 5;
    std::vector<information_t> informations;
    for (i = 0; i < n; i++) {
        information_t information(10 * i);
        informations.push_back(information);
    }                
    print_informations(informations);
    return 0;
}

Résultat :

0
10
20
30
40

Bonne chance

1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 22727 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
10 déc. 2022 à 08:03

bonjour,

quel langage utilises-tu?

0
Pkavalier Messages postés 8 Date d'inscription vendredi 9 décembre 2022 Statut Membre Dernière intervention 19 mai 2023 1
Modifié le 12 déc. 2022 à 20:49

Bonsoir.

J'utilise le langage C++.

J'ai déclaré la procédure Enregistrement sans lui passer mon tableau de structure en paramètre comme suit :

//déclaration de la structure :

struct Informations {
  char Nom[30];
  char Prénom[30];
  int Age;
};

Informations Personne [taille_max];

//Déclaration de la procédure :

void Enregistrement() {
     // code.............
}

Mais quand j'exécute le programme après l'avoir appelé dans la fonction principale, ça tourne à l'infini lorsque je remplis l'un des champs de ma structure avec une chaîne de caractères contenant un espace.

Aidez moi à trouver solution à cette boucle infini qui se crée automatiquement !


0

D'abord, on ne voit pas ton code. Où définis-tu le tableau de structures? Dans le main ou la fonction.
Si c'est dans le main, tu ne le passes pas en paramètre. Ce que tu génères dans la fonction est perdu au retour.
Si c'est dans la fonction, comment comptes-tu le retourner au main?

Est-ce un tableau à la C, un vecteur, un array?

0
Pkavalier Messages postés 8 Date d'inscription vendredi 9 décembre 2022 Statut Membre Dernière intervention 19 mai 2023 1
Modifié le 12 déc. 2022 à 20:50

Je travaille dans code blocks.

La méthode Enregistrement, la structure Informations et le tableau de structure sont tous définis dans un fichier source que j'ai créé.

L'exercice impose que la fonction main n'appele que des procédures. 


0