Bonsoir,
Pour déclarer une structure machin contenant une variable a de type int et une variable b de type char:
struct machin{
int a;
char b;
}machin;
Pour déclarer une variable bidule de type structure machin:
struct machin bidule;
La déclaration:
typdef struct{
int a;
char b;
}machin;
déclare un nouveau type, le type machin, qui est une structure consituée d'une variable a de type int et d'une variable b de type char .
Pour déclarer une variable bidule de type machin:
machin bidule;
Le typedef permet donc de se passer du struct lors de déclarations de variables de type structure.
Je te propose d'aller ici:
http://www.commentcamarche.net/contents/c/cstruct.php3 pour plus de détails sur les structures, et ici:
http://www.commentcamarche.net/contents/c/ctype.php3 , sous "Créer un type de donnée" pour une description succinte du mot-clé typedef, ainsi que sur le post ici:
http://www.commentcamarche.net/forum/affich-9854493-typedef#q=typedef&cur=4&url=%2F pour plus de détails et un exemple sur le sujet.
Ensuite, avec toutes ces infos, vérifie ton code, tranquillement. Notamment:
- les déclarations des types clients et comp, suivant si tu veux que ceux-ci soient des types ou des structures,
- ainsi que les variables relatives à ces types (ou à ces structures, le cas échéant).
[EDIT]
Voilà pour les structures et le typedef. En revanche, tu vas avoir des problèmes avec
gets. Cette fonction ne limite pas le nombre de caractères entrés (risque de
buffer overflow - dépassement de capacité), et elle prend comme argument un pointeur vers un tableau de type char, et retourne un pointeur vers le tableau de caractères si la lecture sur
stdin (le plus souvent, c'est le clavier) ou NULL en cas d'erreur. Cette fonction ne prend pas de paramètre lui indiquant la taille du tableau, d'où le risque de dépassement de capacité. Je te recommande plutôt d'utiliser fgets, qui prend en paramètres, dans cet ordre: un pointeur vers un tableau de type char, la taille de ce tableau, flot de données (stdin ou fichier). Cette fonction a les même retours que gets. Par exemple,
char test[256];
int *nRet = fgets(test, 256, stdin);
if(nret==NULL) // = if(!nRet)
printf("Erreur lors de la saisie.\n");
fflush(stdin);
De plus, dans ta structure, tu as, par exemple: int numtel
Ecrire un char dans un int est autorisé par le compilateur car le type char est en fait un int (déclaré comme ceci: typedef int char;), mais fonctionnellement, numtel contiendra, après remplissage, le code
ASCII étendu (pour simplifier l'explication: code ASCII), qui est un nombre codé sur 8 bits, donc compris entre 0 et 255, du premier caractère présent dans le tampon du clavier. Si l'utilisateur de ton programme saisi un numéro de téléphone sur 10 chiffres, c'est la cata: supposons, pour simplifier,qu'un int ne puisse contenir qu'un seul code ASCII (ce n'est pas le cas, mais autant faire simple), avec gets, NumTel contiendra le code ASCII du premier caractère saisi, DateOuverture contiendra le code ASCII du second caractère saisi, et Profession[0], le troisième, Profession [1], le quatrième, et ainsi de suite, jusqu'au dixième, c'est un buffer overflow, sans compter que tu ne stocke pas le numéro de téléphone, mais du code ASCII. Avec fgets, pas de buffer overflow, avec, par exemple, en supposant la variable c déclarée comme étant une variable de type structure: fgets(c.numtel, 1, stdin); mais toujours le problème du code ASCII au lieu du numéro de téléphone. Le même principe s'applique pour DateOuverture.
Quant à scanf, je t'apporte une précision: si tu l'utilise avec la chaîne de formatage %s pour entrer une chaîne de caractères (au lieu %d pour formater l'entrée saisie au format double ou %i pour formater cette même entrée au format entier - integer en anglais), sache que scanf supprime les espaces qui lui semblent inutiles et parfois, tout ce qui suit l'espace en question.
Je te propose de revoir un peu ton code, tu es tombé dans quelques pièges que tu sauras maintenant éviter.
[FIN D'EDIT]
L'idéal étant à mon sens que tu résolves les problèmes par toi-même (c'est comme çà qu'on apprend, en faisant des erreurs et en les corrigeant après s'être documenté, au besoin), j'espère t'avoir suffisamment guidé, dans cet objectif. Si toutefois tu as besoin de plus de détails, n'hésite pas.
<Hors sujet>
Je vois que tu es nouveau sur CCM. Soit le bienvenu.
Si un de tes messages a du mal à passer, c'est peut être à cause de robot qui réagit à certains termes.
Pour éviter la réécriture de texte (des fois long) et/ou s'énerver d'avoir perdu ce qu'on a écrit, si tu as firefox je te propose d'installer lazarus qui te permettra de récupérer le texte perdu.
En même temps tu peux contacter un modo par MP pour restauration.
Ici la liste des modo http://www.commentcamarche.net/contents/ccmguide/ccmequipe.php3
Ici quelques liens qui pourront t'aider
http://www.commentcamarche.net/contents/ccm/
http://www.commentcamarche.net/faq/commentcamarche-176
Bonne continuation
</Hors sujet>
P.S. J'ai restauré 2 de tes messages
http://www.commentcamarche.net/forum/affich-22260211-les-structures-en-langage-c#9 et ton dernier
<hors sujet>
Merci pour les liens, les infos et le coup de pouce!
<fin du hors sujet>