Aide SVP en C
Fermé
kirikou2
-
2 nov. 2009 à 20:22
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 3 nov. 2009 à 01:08
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 3 nov. 2009 à 01:08
1 réponse
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
3 nov. 2009 à 01:08
3 nov. 2009 à 01:08
Bon déjà ce serait bien d'oublier les #pragma et conio.h car ce n'est pas du code standard. Au niveau des scanf tu es sensé passer des char * et non des char ** car on ne modifie pas l'adresse de la chaîne, mais bien la chaîne elle même.
Je rappelle que char * désigne l'adresse d'un char (en l'occurrence c'est même une suite de char, ie une chaîne) et que donc un char ** désigne l'adresse d'une adresse de char. Or scanf cherche à bien à modifier une chaîne. Si tu scanais un int ça aurait un sens car comme tu le sais, en C, les paramètres de fonction sont empilés. Ainsi, si tu passais directement un int en paramètre à scanf, tu aurais l'impression qu'il ne fait rien. C'est la seule raison pour laquelle on fait un passage par pointeur.
Si tu veux t'en convaincre essaye ce code :
Ainsi ta fonction Crea ressemble plutôt à :
(... même principe dans ton main).
Ensuite (et comme tu le vois dans cet exemple) main est sensé retourner un int, le code de retour de l'application (0 si tout va bien et une valeur autre sinon).
Ensuite je n'ai pas très bien compris ce que tu cherchais à faire ici :
... mais si le but c'est de mettre à zéro 400 structures de type Personne, tu es sensé faire un memset. Pour plus de détail sur l'utilisation de memset, cherche sur google "man memset".
Bonne chance
Je rappelle que char * désigne l'adresse d'un char (en l'occurrence c'est même une suite de char, ie une chaîne) et que donc un char ** désigne l'adresse d'une adresse de char. Or scanf cherche à bien à modifier une chaîne. Si tu scanais un int ça aurait un sens car comme tu le sais, en C, les paramètres de fonction sont empilés. Ainsi, si tu passais directement un int en paramètre à scanf, tu aurais l'impression qu'il ne fait rien. C'est la seule raison pour laquelle on fait un passage par pointeur.
Si tu veux t'en convaincre essaye ce code :
#include <stdio.h> void f(int x){ ++x; } void g(int *px){ ++(*px); } int main(){ int a = 10; printf("1) %d\n",a); f(a); printf("2) %d\n",a); g(a); printf("3) %d\n",a); return 0; }
Ainsi ta fonction Crea ressemble plutôt à :
void Crea(Personne *fiche) { printf("Veuillez entrer votre numero d'identite SVP \n"); fflush(stdin); scanf("%d",&fiche->numero); printf("Veuillez entrer votre nom de famille SVP \n"); fflush(stdin); scanf("%s",fiche->nom); printf("Veuillez entrer votre prenom SVP \n"); fflush(stdin); scanf("%s",fiche->prenom); printf("Veuillez entrer votre ville de residence SVP \n"); fflush(stdin); scanf("%s",fiche->ville); printf("Veuillez entrer votre code postal SVP \n"); fflush(stdin); scanf("%d",&fiche->code); printf("Veuillez entrer votre taille si inconnue saisir 0 \n"); fflush(stdin); scanf("%d",&fiche->taille); }
(... même principe dans ton main).
Ensuite (et comme tu le vois dans cet exemple) main est sensé retourner un int, le code de retour de l'application (0 si tout va bien et une valeur autre sinon).
Ensuite je n'ai pas très bien compris ce que tu cherchais à faire ici :
Personne Tableau[400]= {0};
... mais si le but c'est de mettre à zéro 400 structures de type Personne, tu es sensé faire un memset. Pour plus de détail sur l'utilisation de memset, cherche sur google "man memset".
Bonne chance