pg en C

Forum Programmation : pg en C

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

scanf ne prend en paramètre que des pointeurs, donc il faut ajouter le &:
scanf("%d",&((tab+i).anne_scolaire));

et pour le printf, les parenthèses sont mal mises.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Éssai juste de faire afficher un integer.anne_scolaire pour voir ca donne quoi. Si ca marche pas c'est jsute pas le bon type pour la valeur associée au champ anne_scolaire

Répondre à soucheqc

J'avais pas vu non plus, il faut utiliser -> sur un parent pointeur, pas le . :
&((tab+i)->anne_scolaire)

Pour la flèche, c'est pareil dans le printf

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

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:

Code :
  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


Message édité par coca25 le 18-07-2007 à 22:21:19
------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25

merci beaucoup
ca marche
mais pouver vou me dire que fait exactement la fct getchar() s'il vous plais
en effet ca marchera sans toute la boucle while

Répondre à coolata

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

------------------------------ Ne pas oublier le [resolu] pour finir le sujet.
Penser à voir les tutos, ca peut aider!
Répondre à coca25
Tom's Guide > Forum > Programmation > pg en C
Aller à :

Il y a 582 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens