[C] Fonction fprintf et fichier formaté: j'ai du mal :/

Fonction fprintf et fichier formaté: j'ai du mal :/ [C] - C - Programmation

Marsh Posté le 12-10-2003 à 23:44:27    

Bisoir,  
 
 
J'ai un chti problème avec un fichier que je veux importer et qui est au format suivant:
 
"nom;prenom;sexe;age;departement;remuneration;\n"
 
Ce qui me semble etre le plus correct à faire serait çà:
 

Code :
  1. while(fscanf(flux,"%s;%s;%s;%d;%d;%d;\n", &nom, &prenom, &sexe, &age, &departement, &remuneration)
  2. {
  3.      printf("nom : %d ...
  4. }


 
mais tout se retrouve dans la variable nom :/
 
Comment lire correctement ce type de fichier avec fprintf ?
 
Ou sinon autre méthode, récupérer toute la ligne puis la découper grace aux ";", mais hélas je connais pas de fonctions idéale... y'aurait il pas un équivalent de explode de php?
 
:jap:

Reply

Marsh Posté le 12-10-2003 à 23:44:27   

Reply

Marsh Posté le 12-10-2003 à 23:56:52    

une boucle avec strtok
 
Dan ton code, si nom est bien une chaîne (char[] ou char *) tu ne dois pas mettre le "&" devant hein ;) Ce sont déjà des pointeurs. C'est que pour les %d %c %f etc. qu'il faut prendre l'adresse de la variable.


Message édité par antp le 12-10-2003 à 23:58:18

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 13-10-2003 à 00:26:42    

[benoit@athlon tmp]$ cat antp_a_tort.c


Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4.   char nom[100], prenom[100], sexe;
  5.   int age, departement, remuneration;
  6.   while(fscanf(stdin,"%[^;];%[^;];%c;%d;%d;%d;\n", nom, prenom, &sexe, &age, &d
  7. epartement, &remuneration) == 6)
  8.   {
  9.     fprintf(stdout,"-> %s - %s - %c - %d - %d - %d\n", nom, prenom, sexe, age, d
  10. epartement, remuneration);
  11.   }
  12.   return 0;
  13. }


[benoit@athlon tmp]$ gcc_ansi antp_a_tort.c && echo -e "xxxx;benoit;m;20;64;0;\nyyyy;programmeuse python;f;20;60;696969\n" | ./a.out
-> xxxx - benoit - m - 20 - 64 - 0
-> yyyy - programmeuse python - f - 20 - 60 - 696969


Message édité par Taz le 13-10-2003 à 01:02:22
Reply

Marsh Posté le 13-10-2003 à 10:40:03    

:??: en quoi j'ai tort ? je cite juste strtok comme solution alternative :o
 
j'ai pas dit que son erreur venait uniquement des "&"


Message édité par antp le 13-10-2003 à 10:40:33
Reply

Marsh Posté le 13-10-2003 à 11:08:40    

Un grand merci à vous deux pour vos réponses... la solution de Taz marche très bien, le coup de chopper tout ce qu'il y a avant un ";" est nickel. Comme çà, çà fonctionne aussi avec les chaines contenant un espace :)
 
antp j'avais essayé avec le & et sans, des fois que mon erreur venait de là mais non :/
 
:jap:


Message édité par LaTeX_ le 13-10-2003 à 11:09:26
Reply

Marsh Posté le 13-10-2003 à 12:07:47    

LaTeX_ a écrit :


antp j'avais essayé avec le & et sans, des fois que mon erreur venait de là mais non :/
 
:jap:

effectivement elle venait de là et non. ton programme ne pouvait fonctionnera vec les & en trop, mais sans il n'aurait pas rendu le résultat escompté

Reply

Marsh Posté le 13-10-2003 à 13:37:54    

Taz a écrit :

effectivement elle venait de là et non. ton programme ne pouvait fonctionnera vec les & en trop, mais sans il n'aurait pas rendu le résultat escompté


 
à propos de çà, j'ai un autre soucis... je veux recupérer le contenu de nom, prenom, age... etc pour le mettre dans une structure pointée mais pour les char[X] çà me mets juste la première lettre  :??:
 
c'est quand je fait çà :

Code :
  1. *premierepers->nom=*nom;
  2. *premierepers->prenom=*prenom;


la structure :

Code :
  1. typedef struct personnel
  2.         {
  3.         char nom[20];
  4.         char prenom[20];
  5.         ...   
  6.         }


 
la définition de premierepers:
 

Code :
  1. personnel *premierepers


 
J'ai fait attention à ce que le type de nom et prenom dans la structure soit identique au type de nom et prenom dans la fonction... je fait mal l'enregistrement ...
 
faut il que je fasse une boucle ou y a-t-il un moyen de tout récupérer en une passe ? J'ai essayé avec diverses combinaisons mais je sèche :sweat:


Message édité par LaTeX_ le 13-10-2003 à 13:38:46
Reply

Marsh Posté le 13-10-2003 à 14:17:48    

strcpy çà te dit quelque chose ?
tu ferais bien de t'entrainer un peu aux pointeurs, par ce que là c'est à la petite étoile la flèche

Reply

Marsh Posté le 13-10-2003 à 21:56:21    

Bah ouai mais ca fait plus de 6 mois que j'ai pas retouché au C [:spamafote]
 
Merci pour le coup de main ;)

Reply

Marsh Posté le 13-10-2003 à 21:57:49    

c'est des trucs qui ne s'oublient pas. approfondis, pour maitriser complètement les pointeurs, parce que là tu rames sur des erreurs à la mesure de ton incompréhension :/

Reply

Marsh Posté le 13-10-2003 à 21:57:49   

Reply

Marsh Posté le 13-10-2003 à 23:28:28    

A force de ne pas manipuler, çà s'oublie, surtout quand on est pas très fan ;)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed