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 -
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é
Exemple :
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) ?
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
voidavec 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
-
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 -
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 devoid
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 fonctionstruct_etudiant()
ne doit rien retourner. Dans d'autres langages, on appelle cela une "procédure". Il n'y a pas d'instructionreturn <quelque chose>
à la fin d'une fonction dont le type estvoid
.
En revanche, une fonction qui retournerait une valeur, par exempleint max(int x, int y)
doit comporter unreturn <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 survoid
, 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 survoid
.
Ces pointeurs survoid
servent, par exemple, à faire, ou à utiliser des fonctions génériques fonctionnant avec n'importe quel type de données.
La fonction standard Cqsort()
, 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 survoid
dans ta fonctionvoid 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