Se connecter avec
S'enregistrer | Connectez-vous

pg en C

Dernière réponse : dans Programmation

s'il vous plais je veux que quelqu'un m'aide avec les erreur que j'ai dans ce programme avec beaucoup de remerciemen pour vous

#include<stdio.h>
#include<stdlib.h>
struct eleve
{
char nom[20];
int anne_scolaire;
};
void main()
{
struct eleve *tab;
tab=(struct eleve*)malloc(2*sizeof(struct eleve));
for(int i=0;i<=1;i++)
{
gets((*(tab+i)).nom);
scanf("%d",(tab+i).anne_scolaire);
}
for(int j=0;j<=1;j++)
{
puts((*(tab+i)).nom);
printf("%d",(*(tab+i).anne_scolaire));
}
free(tab);
}

les erreurs que j'ai eu sont:
D:\2eme session\I205\RAPPEL c\structpers.cpp(15) : error C2228: left of '.anne_scolaire' must have class/struct/union type
D:\2eme session\I205\RAPPEL c\structpers.cpp(20) : error C2228: left of '.anne_scolaire' must have class/struct/union type

mais je croix que l'anne_scolaire est un champs de la structure eleve.pourquoi c'est faux?
merci

Autres pages sur : question

Lassé par la pub ? Créez un compte

en plus de CRicky (EDIT: il s'en est rendu compte ;) , par contre pour le printf, il y a le *):
pour avoir le membre d'une structure pointée, il faut utiliser "->" :
&((tab+i)->anne_scolaire)

pour le scanf, il te faut purger ce qui reste dans le buffer clavier:
  1. int c;
  2. for(int i=0;i<=1;i++)
  3. {
  4. gets((*(tab+i)).nom);
  5. scanf("%d",&((tab+i)->anne_scolaire));
  6. while ( ((c = getchar()) != '\n') && c != EOF);
  7. }

et enfin, tu utilises i dans la 2eme boucle alors que c'est j

elle vide tous les caractères tapés après le nombre quand tu le demandes.
si tu répond "12cfg" par exemple à la demande du nombre, cfg sera enlevé.
de même que le caratère retour à la ligne "\n" qui peut poser problème et faire sauter la deuxieme demande.

getchar lit une entrée au clavier
Lassé par la pub ? Créez un compte
Tom's guide dans le monde