Langage C et problème d'espaces

Fermé
Fab - 7 mai 2003 à 14:57
toph Messages postés 191 Date d'inscription mardi 27 novembre 2001 Statut Membre Dernière intervention 19 juin 2007 - 8 mai 2003 à 21:02
Bonjour,

Je réalise actuellement un logiciel en C.
Je fais mes maniupulations et les enregistrent dans un fichier texte.
Tous ce passe carrectement par contre quand je charge ce fichier au démarrage du logiciel, La prise en compte des espaces ne se fait plus. Par exemple, pour l'adresse postale d'une personne, les espaces entre les mots ne marche pas.
Voici le code :


void load(){
char c;
char nom[50];
char prenom[50];
char notel [11];
char adres [100];
char cp [6];
char ville [50];
FILE *fic;
struct person *ptemp;
struct person *pteur;
pteur = pointeur;

/* Ouverture du fichier*/
fic = fopen(nom_fich,"rt");
/* Mettre le pointeur à NULL*/
pointeur = NULL;

/* Tant que le fichier n'est pas EOF on met les données dans le pointeur*/
while ((fscanf(fic, "%s\t%s\t%s\t%s\t%s\t%s\n",nom,prenom,notel,adres,cp,ville)) != EOF){
ptemp = pointeur;
pointeur = malloc(sizeof(struct person));
strcpy(pointeur->nom, nom);
strcpy(pointeur->prenom, prenom);
strcpy(pointeur->notel, notel);
strcpy(pointeur->adres, adres);
strcpy(pointeur->cp, cp);
strcpy(pointeur->ville, ville);
pointeur->suivant = ptemp;
}
system("cls");
printf("\n\n\n\n ******************************************************\n");
printf(" * *\n");
printf(" * AGENDA 2002 *\n");
printf(" * *\n");
printf(" ******************************************************\n\n");
printf(" ------------------------------------------------------\n");
printf("\n Chargement effectue !");
c=getchar();
c=getchar();
system("cls");
/*Fermeture du fichier*/
fclose(fic);
}

Merci à tous ceux qui m'aideront !
A voir également:

2 réponses

batmat Messages postés 1871 Date d'inscription jeudi 1 novembre 2001 Statut Membre Dernière intervention 9 janvier 2008 114
8 mai 2003 à 20:34
Bon je ne parlerai pas de l'exemple de commentaire à ne pas mettre ;-)
C vrai que c un peu plus compliqué, mais c'est comme de faire :
if(x=1) //si x vaut 1
{
}

Pour ta réponse, c'est très simple => scanf (fscanf aussi donc : d'ailleurs question aux autres : scanf ne serait pas une macro utilisant fscanf avec stdin ?) s'arrête aux espaces...

Donc pour ton problème, moi je vois une solution => tu saisis la ligne complète avec fgets (soit dit en passant : utilisation de gets interdite ;-) ) qui te prendra les espaces, ensuite tu parcours la chaine pour en extraire les chaines "intertabulation"

@++
Vous hésitez entre Linux et Windows?
Vous voulez dépenser du temps ou de l'argent ?
0
toph Messages postés 191 Date d'inscription mardi 27 novembre 2001 Statut Membre Dernière intervention 19 juin 2007 11
8 mai 2003 à 21:02
essaye ce qui suit:

sscanf(fic,"%[^\n]",nom);

par exemple. Cela signifie que l'arrêt se fera sur le CR c'est à dire \n et plus sur l'espace.

Attention, je ne crois pas que cela suive la norme ANSI mais chez-moi, sous windows, ca marche.



Dans le travail, l'important... c'est les vacances
0