Structure en langage C
Résolu
Hanan
-
fiddy Messages postés 11653 Statut Contributeur -
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
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:
- Structure en langage C
- Langage ascii - Guide
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Langage binaire - Guide
- Structure d'un rapport de stage - Guide
- Pascal langage - Télécharger - Édition & Programmation
14 réponses
attention à bien passer un pointeur ou son équivalent dans la fonction scanf ! ce qui 'nest pas totalement le cas ici.
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)
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
y t-il des cas vraiment ou on px ne pas mettre "&" dans scanf?ou b1 notre prof est LOCO =D
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
à 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.
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.
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,
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,
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)
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.
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.