Structure en langage C

Résolu
Hanan -  
fiddy Messages postés 11653 Statut Contributeur -
Bonjour,

j'écris un programme en langage C qui permet de saisir les données des stagiares relatifs aux 28 d'un groupe ,chaque stagiare posséde:-nom -prenom - age -ID - note (d'un module qlqonk ). (en utilisant les structures),mais il ça marche pas, qlq peut m'aider pr savoire ou est le probléme?
le programme:


#include <stdio.h>
int main (){
struct stagiaire{
char nom[20];
char prenom[20];
int age;
char ID[20];
float note;};
struct stagiaire A[28];
int i;


for(i=0;i<28;i++)
{
printf("saisir votre nom \n");
scanf("%s",A[i].nom);
printf("saisir votre prenom \n");
scanf("%s",A[i].prenom);
printf("saiair votre age \n");
scanf("%d",A[i].age);
printf("saisire votre note ");
scanf("%f",A[i].note);

printf("saiair votre ID \n");
scanf("%s",A[i].ID);


}
for(i=0;i<28;i++)
{
printf("%s\t",A[i].nom);
printf("%s\t",A[i].prenom);
printf("%d\t",A[i].age);
printf("%f",A[i].note);
printf("%s",A[i].ID);
return 0;}}

******************
Merci d'avance
A voir également:

14 réponses

Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
attention à bien passer un pointeur ou son équivalent dans la fonction scanf ! ce qui 'nest pas totalement le cas ici.
0
Hanan
 
comment ? j'ai pas compris ton idéé
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
Si tu ne comprends pas, c'est que tu ne sais pas utiliser scanf. Je te recommande donc de te renseigner pour savoir comment l'utiliser correctement. (genre un tutoriel)
0
Hanan
 
Oui t'as raison quand j'utliser "&" le prog ca marche ,mais notre prof nous a dit que dans les structures c pas necessaire de la mettre!!!!
y t-il des cas vraiment ou on px ne pas mettre "&" dans scanf?ou b1 notre prof est LOCO =D
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
ton prof à tord, et la tu ne passe pas une structure, mais une variable d'un structure.
0
Hanan
 
Merci beaucoup pour ton remarque je vais la prendre en consédérable la prochaine fois
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
à vérifier peut être.
ton prof a peu être raison, mais je ne connais pas le comportement de scanf si tu passes une structure. Et que mettre dans la chaine de caractère ?
Une chose est sure, en C++ il aurait tort. Il me semble qu'une structure est une variable à part entière et non une référence. Il est possible d'accéder au différent membres d'une structure ainsi ;
struct {int a;float b;char c[20]} A;
scanf("%d %f",(int*)(&A),(float*)(sizeof(int)+(char*)&A); // si char* est bien de taille 1.
Les cas où il ne fait pas mettre de &, c'est lorsque tu passes un pointeur. Il faut toujours penser au passage par valeur ou par référence/adresse pour comprendre le pourquoi du comment.
0
Hanan
 
aah bon un grand merci pour toi
0
narjes
 
il faut que la definition de structure avant main
0
Hanan
 
comment?? quelle structure??
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Non narjes, ce n'est pas une obligation. Cela marche très bien en laissant la structure comme il l'a mis. Après, l'utilisation, c'est vrai que ce n'est pas courant...
0
Profil bloqué
 
Merci ;)
0
yassine
 
struct stagiaire{
char nom[20];
char prenom[20];
int age;
char ID[20];
float note;};
struct stagiaire ;
avant le main
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Comme dit précédemment, ce n'est pas une obligation...
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Bonjour,
Je confirme les propos de Char Snipeur.
Que ce soit une structure ou pas, l'esperluette (&) est obligatoire pour les types natifs (int, char, double, ...).

Par contre, attention Char Snipeur, si on peut accéder aux différents membres, le compilateur se réserve le droit de réorganiser l'ordre des données.

Et l'accès des données comme tu l'as fait ne risque pas de marcher. Il ne faut surtout pas utiliser de sizeof, un simple cast avec un décalage de 1 suffit pour atteindre le champ suivant.

Cdlt,
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
Les réorganisé ?? Jamais entendu parler de ça. Si c'était vraiment le cas, le mix fortran + C ne fonctionnerai pas (COMMON vs. struct), en revanche le compilateur se réserve le droit de les alignés comme il veux. (Ce qui fait que ma "méthode" peut grave merder, mais c'était pour illustré, j'aurai du préciser)
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Par réorganiser je voulais plutôt dire alignement (je me souvenais plus du nom).
Mais même s'il n'y avait pas d'alignements, ta "méthode" ne pouvait pas marcher.
Pour se décaler, il ne faut pas de sizeof. L'unité de Si tu veux un exemple, n'hésite pas.l'offset n'est pas le byte.
0
Char Snipeur Messages postés 10112 Statut Contributeur 1 299
 
Oui, exact, j'ai écrit n'importe quoi.
scanf("%d %f",(int*)(&A),(float*)(1+(int*)&A);
Là ça doit être bon, si l'alignement est celui de base. Merci de la correction fiddy.
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Yep, c'est mieux maintenant :-). Il manque juste une petite parenthèse, mais le principal est là.
0