Structure en langage C

Résolu
Hanan -  
fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   -
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

14 réponses

  1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    attention à bien passer un pointeur ou son équivalent dans la fonction scanf ! ce qui 'nest pas totalement le cas ici.
    0
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  3. 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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    ton prof à tord, et la tu ne passe pas une structure, mais une variable d'un structure.
    0
  6. Hanan
     
    Merci beaucoup pour ton remarque je vais la prendre en consédérable la prochaine fois
    0
  7. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    à 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
  8. narjes
     
    il faut que la definition de structure avant main
    0
    1. Hanan
       
      comment?? quelle structure??
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   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
    3. Profil bloqué
       
      Merci ;)
      0
    4. yassine
       
      struct stagiaire{
      char nom[20];
      char prenom[20];
      int age;
      char ID[20];
      float note;};
      struct stagiaire ;
      avant le main
      0
    5. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      Comme dit précédemment, ce n'est pas une obligation...
      0
  9. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   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
  10. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  11. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   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
  12. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  13. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Yep, c'est mieux maintenant :-). Il manque juste une petite parenthèse, mais le principal est là.
    0