Besoin reponse sur les fonction avec structures et pointeur

Fermé
out49 Messages postés 20 Date d'inscription mardi 17 octobre 2017 Statut Membre Dernière intervention 21 octobre 2017 - Modifié le 20 oct. 2017 à 09:54
out49 Messages postés 20 Date d'inscription mardi 17 octobre 2017 Statut Membre Dernière intervention 21 octobre 2017 - 21 oct. 2017 à 02:22
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) ?
A voir également:

2 réponses

mamiemando Messages postés 33079 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 23 avril 2024 7 749
20 oct. 2017 à 10:00
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
out49 Messages postés 20 Date d'inscription mardi 17 octobre 2017 Statut Membre Dernière intervention 21 octobre 2017
21 oct. 2017 à 02:22
mrci beaucoup... je vois mieux
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 20 oct. 2017 à 13:28
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
out49 Messages postés 20 Date d'inscription mardi 17 octobre 2017 Statut Membre Dernière intervention 21 octobre 2017
21 oct. 2017 à 02:21
merci beaucoup ça m'as aider vraiment
0