Application simple qui pourtant ne marche pas
Bonjour a tous.
Je suis depuis plusieurs heures sur un probleme qui est pourtant tout simple. Je ne vois vraiment pas ou pourait etre le probleme. Bientot je m'arrache les cheveux. Donc si vous pouviez m'eviter la calvitie , j'apprecierai grandement.
je vous presente mon main.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
int main(int argc, char *argv[])
{
char option;
char *Nom = (char*)malloc(sizeof(char*));
int Num;
AnnuR a[MAX];
CreateAnnuR("Test",a);
while(option !='q')
{
printf("Commande : ");
scanf("%c",&option);
fflush(stdin);
if(option == 'i')
{
printf("Nom \t: \t", Nom);
scanf("%s",Nom);
fflush(stdin);
printf("\nNumero \t: \t", Num);
scanf("%d",&Num);
fflush(stdin);
NewUser(a,Nom,Num);
}
else if(option == 'c')
{
ConsultingAnnuR(a);
}
}
return 0;
} |
Les fonction utilisé CreateAnnuR, NewUser et ConsultingAnnur sont tres simple.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
typedef struct AnnuR
{
char *nomAnnu;
char *nom;
int num;
int indexF;
}AnnuR;
void CreateAnnuR(char *NomAnnu, AnnuR *Annu)
{
int i;
Annu->indexF = 0;
printf("Creation de l'annuaire ... %s\n", NomAnnu);
for(i=0;i<MAX;i++)
{
Annu[i].nom = "";
}
}
void ConsultingAnnuR(AnnuR *a)
{
int i =0;
while(i<a->indexF)
{
printf("Nom \t:\t %s\n", a[i].nom);
printf("Numero \t:\t %d\n", a[i].num);
printf("======================================\n");
i++;
}
}
void NewUser(AnnuR *Annu, char *unNom, int unNum)
{
Annu[Annu->indexF].nom = unNom;
Annu[Annu->indexF].num = unNum;
Annu->indexF ++ ;
} |
Le probleme de ce programme c'est quand je crée 2 NewUser (ou plus). Le nom des precedent User dans le tableau est remplacé par celui du dernier User crée.
Si vous pouviez m'aider.
Merci
Re: Application simple qui pourtant ne marche pas
Citation:
Envoyé par ThanosT
Code:
1 2
| scanf("%c",&option);
fflush(stdin); |
En plus de ce qui a été dit, j'ajoute que telles quelles, les saisies par scanf() sont fragiles, instables et difficile à écrire correctement. D'autre part, fflush() n'est défini que pour les flux sortants.
Je conseille ceci :
http://emmanuel-delahaye.developpez....tes.htm#saisie
http://emmanuel-delahaye.developpez....s.htm#fichiers
Re: Application simple qui pourtant ne marche pas
Citation:
Envoyé par Emmanuel Delahaye
D'autre part, fflush() n'est défini que pour les flux sortants.
En effet, et cela peut être un problème pour toi si tu essaies de faire fonctionner le programme autre part que sous Windows (Comportement indéfini).
Heureusement, avec des fgets(), on n'a pas trop besoin de vider le buffer (moins qu'avec scanf(), en tout cas).
PS: Emmanuel, tu sais comment on peut vider le buffer en C (ou du moins savoir s'il est vide ou non) ?
Edit: Oui, j'ai lu tes articles, mais ils n'ont pas répondu à ma question...
Re: Application simple qui pourtant ne marche pas
Citation:
Envoyé par Médinoc
Heureusement, avec des fgets(), on n'a pas trop besoin de vider le buffer (moins qu'avec scanf(), en tout cas).
PS: Emmanuel, tu sais comment on peut vider le buffer en C (ou du moins savoir s'il est vide ou non) ?
Il suffit d'utiliser les bonnes fonctions de saisies et de les utiliser correctement. Je poste ces liens au moins 3 fois par jour...
http://emmanuel-delahaye.developpez....tes.htm#saisie
http://emmanuel-delahaye.developpez....s.htm#fichiers