Salut,
je viens de tomber sur ton poste est autant dire que c'est pas du propre =).
J'ai fait quelques modification et ca marche nickel.
Et je doute que le code que tu nous a présenté marche sous Linux! Loin de la meme!
Bref voila les modifications a faire :
1) Quand tu declare une structure, pas la peine de mettre une deuxieme fois struct pour declarer une variable!
2)scanf prend en parametres le typre de données et l'adresse de la variable ou les données vont etre stocké!
La premiere valeur tableau de char retourne implicitement l'adresse! Or pour les autres variables de type int, double,... ce n'est pas le cas! Tu es donc obliger de mettre un "&" devant ta variable lors du scanf!
ex :
char machaine[80]; int nombre;
scanf("%s",machaine); scanf("%i",&nombre);
|
3)Dans scanf l'ordre d'appel des varaibles doit etre le meme que celui des types appellés et il faut indiquer un séparateur quand il y a plusieurs variables a traiter dans le scanf(un espace, une virgule,...)!
Regarde ce que tu as mis :
scanf("%s%s%d",p.nom,p.age,p.prenom);
|
Il ne faut pas tout inverser =)
Voici la correction, j'ai mis un espace comme séparateur. L'isager va donc devoir mettre un espace quand il rentrera son nom, son prenom et son age dans le programme sinon ca ne marchera pas :
scanf("%s %s %i",p.nom,p.prenom,&p.age);
|
LE PROGRAMME MARCHE ENFIN!
Voici le code en entier et corrigé :
#include<stdio.h> #include<stdlib.h>
#define N 40
typedef struct { char nom[N+1]; char prenom[N+1]; int age; }PERSONNE;
int main(int argc, char* argv[]) { FILE *f; char essai[81]; PERSONNE p;
printf("tapez le nom du fichier a creer : "); scanf("%s",essai); f=fopen(essai,"w"); printf("\ntapez le nom le prenom et l'age separ\202 par des esapces : "); scanf("%s %s %i",p.nom,p.prenom,&p.age); fprintf(f,"nom:%s \nprenom:%s \nage:%d",p.nom,p.prenom,p.age);
fclose(f); return 0; }
|
Soit plus attentif quand tu codes et n'hésites pas a tester chaque fonction indépendament pour le debugage!
Sinon je te souhaite une bonne continuation et si t'as un probleme n'hésites pas.
A++
Samir