Besoin reponse sur les fonction avec structures et pointeur

out49 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
out49 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -
Salut.

Je suis débutant, et j'ai des questions par rapport à un programme en C : j'aimerais savoir comment utiliser le mot clé
void
. Si je veux utiliser
void
avec un pointeur, comment serait mon
scanf
?

Exemple :

void struct_etudiant(stud *etd) {
  printf("nom\n");
  scanf("%s", etd->nom);
}


C'est ainsi j'ai fait, mais ça ne marche pas. Donc s'il vous plaît, pouvez-vous m'éclairer sur ce point (mon probleme c'est sur la partie du pointeur avec un void) ?

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Bonjour

    Voici un programme qui répond à ta question :

    #include <stdio.h>
    
    typedef struct etudiant {
        char nom[20];
        char prenom[20];
    } etudiant_t;
    
    void etudiant_prompt(etudiant_t * etudiant) {
      printf("nom?\n");
      scanf("%s", etudiant->nom);
      printf("prenom?\n");
      scanf("%s", etudiant->prenom);
    }            
    
    void etudiant_print(const etudiant_t * etudiant) {
        printf(
            "nom: %s\nprenom: %s\n",
            etudiant->nom,
            etudiant->prenom
        );
    }                                                 
                       
    int main() {       
        etudiant_t etudiant;
        etudiant_prompt(&etudiant);
        etudiant_print(&etudiant);
        return 0;      
    }


    ... ce qui donne à l'exécution :

    (mando@aldur) (~) $ gcc plop.c
    (mando@aldur) (~) $ ./a.out
    nom?
    toto
    prenom?
    titi
    nom: toto
    prenom: titi


    Bonne chance
    0
    1. out49 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
       
      mrci beaucoup... je vois mieux
      0
  2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut out49,

    1.

    Je ne suis pas sûr de saisir ce que tu veux veut dire lorsque tu t'interroges sur "utiliser void avec un pointeur, comment serait mon scanf ?" et "mon probleme c'est sur la partie du pointeur avec un void".

    La seule utilisation de
    void
    que tu fais dans le code que tu postes est pour indiquer le type de la fonction dans son prototype, que tu définis ainsi :
    void struct_etudiant(stud *etd)
    .

    void
    signifie ici que ta fonction
    struct_etudiant()
    ne doit rien retourner. Dans d'autres langages, on appelle cela une "procédure". Il n'y a pas d'instruction
    return <quelque chose>
    à la fin d'une fonction dont le type est
    void
    .

    En revanche, une fonction qui retournerait une valeur, par exemple
    int max(int x, int y)
    doit comporter un
    return <un entier>
    à la fin de la fonction.

    Donc, dans ton code,
    void
    indique seulement le type de la fonction, et non pas d'un pointeur.

    2.

    Maintenant, il existe aussi en C des pointeurs sur
    void
    , qui sont des pointeurs génériques, c'est à dire qui ne sont pas attachés à un type particulier.

    Par exemple :
    void * truc;
    déclare un pointeur sur
    void
    .

    Ces pointeurs sur
    void
    servent, par exemple, à faire, ou à utiliser des fonctions génériques fonctionnant avec n'importe quel type de données.

    La fonction standard C
    qsort()
    , qui permet de classer des tableaux de n'importe quel type (un tableau d'entiers, un tabeau de chaînes de caractères, un tableau de struct,...) , repose sur l'usage d'une fonction de comparaison utilisant des pointeurs génériques et qui décrit comment s'effectue la comparaison.

    http://www.cplusplus.com/reference/cstdlib/qsort/

    (vois l'exemple)

    Tu n'as pas vraiment besoin d'utiliser des pointeurs sur
    void
    dans ta fonction
    void struct_etudiant(stud *etd)
    , sauf si tu veux, par exemple, créer une fonction générique qui servirait à remplir des données concernant plusieurs types de personnes.

    Dal
    0
    1. out49 Messages postés 19 Date d'inscription   Statut Membre Dernière intervention  
       
      merci beaucoup ça m'as aider vraiment
      0