avis aux amateur de C

avis aux amateur de C - Programmation

Marsh Posté le 29-05-2002 à 19:46:55    

comment on fait pour pa c un tableau en fichier  
chui sur ke c tt simple mais bon...
moi kan je bidouille ca me fait ca....
alban               moi                 je@moi.fr           È  prout               prout               prout               
 
et evidement ya probleme ...
vu ke ca ne va pas a la ligne...
et pi c koi ce trucmuch la:=>>> È  
pour moi ca devrai etre un chiffre ....
 
hlp si qqn a une idée...

Reply

Marsh Posté le 29-05-2002 à 19:46:55   

Reply

Marsh Posté le 29-05-2002 à 19:47:52    

thx

 

[jfdsdjhfuetppo]--Message édité par cherchepa le 29-05-2002 à 19:48:11--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 29-05-2002 à 19:47:57    

y'a une section PROG exprette pour ce genre de prb. "Déplacement activé"


---------------
Vidéo Concorde Air France | www.kiva.org
Reply

Marsh Posté le 29-05-2002 à 19:53:33    

en francais ca donne quoi?


---------------
What butter and whiskey won't cure, there is no cure for.
Reply

Marsh Posté le 29-05-2002 à 19:54:22    

cherchepa a écrit a écrit :

comment on fait pour pa c un tableau en fichier  
chui sur ke c tt simple mais bon...
moi kan je bidouille ca me fait ca....
alban               moi                 je@moi.fr           È  prout               prout               prout               
 
et evidement ya probleme ...
vu ke ca ne va pas a la ligne...




peut être que si tu insérais les caractères 0x0D et 0x0A à la fin de chaque ligne, ça marcherait mieux....  :sarcastic:  

Citation :


et pi c koi ce trucmuch la:=>>> È  
pour moi ca devrai etre un chiffre ....


ben pour le compilateur, c'est un caractère qui indique que :
- soit tu récupères plus de caractères que ta chaine n'en contient
- soit tu ne termines pas ta chaine ('\0';)

 

[jfdsdjhfuetppo]--Message édité par Harkonnen le 29-05-2002 à 19:54:49--[/jfdsdjhfuetppo]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-05-2002 à 19:58:30    

Harkonnen a écrit a écrit :

 
peut être que si tu insérais les caractères 0x0D et 0x0A à la fin de chaque ligne, ça marcherait mieux....  :sarcastic:  

Citation :


et pi c koi ce trucmuch la:=>>> È  
pour moi ca devrai etre un chiffre ....


ben pour le compilateur, c'est un caractère qui indique que :
- soit tu récupères plus de caractères que ta chaine n'en contient
- soit tu ne termines pas ta chaine ('\0';)  
 
 




 
temps mort !!!!!!
en gros c un truc de merde fo pas chercher loin...
mon tableau ya nom adressede serveur et taille de la boite mail( donc int)
 
ou ve tu ke je rajoute /o ???
parce ke mon tableau ... ben je suis sense ne rien rajouter dedans...
 
en gros kan j'affiche mon tableau ca me fait ..
utilisateur provider adresse      taille
prout       aol      prout@aol       5
 
 
mais kan je sauvegarde... ben ca merde
 
donc vu ke je suis nwbizzz ben le /o je c pas c koi....

 

[jfdsdjhfuetppo]--Message édité par cherchepa le 29-05-2002 à 19:59:46--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 29-05-2002 à 20:01:41    

poste ton code, ça ira beaucoup mieux


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-05-2002 à 20:20:31    

Harkonnen a écrit a écrit :

poste ton code, ça ira beaucoup mieux  




 
 
ca c pour la sauvegarde
void sauvegarde()
{
 int i;
 char nomdelasauvegarde[20];
 
 puts(" entrer le nom de la sauvegarde\n " );
 scanf("%s", nomdelasauvegarde);  
 fichierpti=fopen(nomdelasauvegarde,"w" );
 for (i=0;i<max;i++)
 {
  fwrite(&tab_mail[i],sizeof(mail),1,fichierpti);
 // fwrite((char *)tab_mail[i].serveur,1,20,fichierpti);
 // fwrite((char *)tab_mail[i].adresse,1,20,fichierpti);
     fprintf(fichierpti,"%d",tab_mail[i].taille);
 }
 fclose(fichierpti);
}

Reply

Marsh Posté le 29-05-2002 à 20:22:20    

et ca c le reste ki pe ptet interreser qqn...
 
 
typedef struct
 {
  char user[20],serveur[20],adresse[20];
  int taille;
 }mail;
 
 mail tab_mail[100];
 
FILE *fichierpti;
 
int max=0;
 
void historique()
{
 int i;
 char rep;
 int sortie;
 sortie=1;
 i=max;
 while ( sortie==1 )
 {
  puts("donner le nom de l'utilisateur\n" );
  scanf("%s",tab_mail[i].user);
  puts("donner le nom du serveur\n" );
  scanf("%s",tab_mail[i].serveur);
  puts("donner l'adresse mail\n" );
  scanf("%s",tab_mail[i].adresse);
  puts("donner la taille de la boite\n" );
  scanf("%d",&tab_mail[i].taille);
  flushall();

Reply

Marsh Posté le 29-05-2002 à 21:44:03    

conseil: evite les scanf("%s", string);
c pas tres secur.
Preferes y les fgets ou a la limite tu met la taille ds %20s par ex
 
ca a rien avoir avec ton prob m'enfin :)


---------------
Join us now and share the software;
Reply

Marsh Posté le 29-05-2002 à 21:44:03   

Reply

Marsh Posté le 30-05-2002 à 00:07:52    

Allez, le dépannage de minuit avant d'aller au pieu :d
 
Déja, évite ce genre de manip:

Code :
  1. fwrite(&tab_mail[i],sizeof(mail),1,fichierpti);


car tu n'as aucun controle sur les différents membres de ta structure.
Si tu veux sauvegarder une structure, sauvegarde ses membres 1 par 1 (surtout si tu veux les sauvegarder sous forme de tableau). Comme de plus, ce sont des chaines de caractères, il faut sauvegarder le nombre exact de caractères par chaine, et non le buffer entier de 20 caractères, on sait jamais ce qu'il contient.
Ensuite, il faut séparer les différents champs par une tabulation ! Dans ton code, ils sont séparés par les résidus de la mémoire, d'ou les caractères bizarroides.
Enfin, après chaque ligne, un retour chariot est nécessaire, sinon tu auras tout sur une ligne.
Ce qui nous donne :

Code :
  1. void sauvegarde()
  2. {
  3. int i;
  4. char nomdelasauvegarde[20];
  5. puts(" entrer le nom de la sauvegarde\n " );
  6. scanf("%s", nomdelasauvegarde); 
  7. fichierpti=fopen(nomdelasauvegarde,"w" );
  8. for (i=0;i<max;i++) {
  9.  fwrite(&(tab_mail[i].user), strlen(tab_mail[i].user), 1, fichierpti);
  10.  fprintf(fichierpti,"\t" ); //tabulation
  11.  fwrite(&(tab_mail[i].serveur), strlen(tab_mail[i].serveur), 1, fichierpti);
  12.  fprintf(fichierpti,"\t" ); //tabulation
  13.  fwrite(&(tab_mail[i].adresse), strlen(tab_mail[i].adresse), 1, fichierpti);
  14.  fprintf(fichierpti,"\t" ); //tabulation
  15.  fprintf(fichierpti,"%d\n",tab_mail[i].taille); // derniere ligne => on saisit un retour chariot
  16. }
  17. fclose(fichierpti);
  18. }


ainsi, ça devrait aller beaucoup mieux !
De plus, évite les variables globales dans tes sources, c'est mal  :non:  
Enfin, Cassidy a raison ! Au lieu d'utiliser scanf, utilise fgets comme ceci :
fgets(tab_mail[i].user, 20, stdin);
tu récupères un maximum de 20 caractères dans le champ user de ta structure, à partir de l'entrée standard (clavier).
 
Voila ! Ca devrait fonctionner (j'ai pas testé)
 
Sur ce, moi je vais au dodo  [:lorelei]  
 
A+

 

[jfdsdjhfuetppo]--Message édité par Harkonnen le 30-05-2002 à 00:10:36--[/jfdsdjhfuetppo]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-05-2002 à 05:23:08    

Harkonnen a écrit a écrit :

Allez, le dépannage de minuit avant d'aller au pieu :d
 
Déja, évite ce genre de manip:

Code :
  1. fwrite(&tab_mail[i],sizeof(mail),1,fichierpti);


car tu n'as aucun controle sur les différents membres de ta structure.




Euh, non:
A partir du moment ou il va faire un  

Code :
  1. fread(&tab_mail[i],sizeof(mail),1,fichierpti);


pour lire, ca devrait coller, et c'est efficace, tant que c'est le meme executable qui relit le fichier, et que sa structure tab_mail[i] a ete correctement remplie.

Harkonnen a écrit a écrit :

 
Ensuite, il faut séparer les différents champs par une tabulation  




 :ouch:  :ouch:  :ouch:  
Oulaaa! on voit qu'il etait tard quand tu as ecrit cela. Comme si les '\0' en fin de chaine ne servaient a rien...
 
Notes que si le probleme initial etait de sauvegarder dans un fichier "lisible" a la console (et non pas lisible uniquement par programme), ce que tu as dit serait juste; mais c'est pas precisé dans le sujet initial. (ou alors, cherchepa explique tres mal ce qu'il veut), et alors, un  

Code :
  1. fprintf(fichierpti, "%s\t%s\t%s\t%d\n", tab_mail[i].user, tab_mail[i].server, tab_mail[i].adresse, tab_mail[i].taille);


sera plus efficace qu'une ecriture champ a champ.
A+,

 

[jfdsdjhfuetppo]--Message édité par gilou le 30-05-2002 à 05:35:50--[/jfdsdjhfuetppo]


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 30-05-2002 à 09:14:37    

Après relecture, je constate effectivement que je n'ai pas été clair sur certains trucs, mais bon il était minuit passé hein, chuis pas un robot moi  :D  
En ce qui concerne les tabulations, je suis d'accord avec toi, les '\0' ne sont pas fait pour les chiens et effectivement, il n'a pas précisé s'il souhaitait lire ou non le fichier à la console, ce que moi j'ai supposé, car il dit qu'il souhaite avoir chaque tab_mail[n] sur une ligne différente. Dans quel but si ce n'est pour une réutilisation pour la console ou un éditeur de texte ?
Je voulais aussi comme toi grouper tous les champs via fprintf, mais vu qu'apparemment il connait très peu le C, j'ai jugé préférable pour sa compréhension de séparer l'écriture champ par champ.
 
NB: j'ai pensé ma réponse entièrement en supposant qu'il relirait son fichier via un éditeur de texte, ceci pouvant expliquer certaines réponses de ma part assez bizarres (notamment le fait que chaque champ serait séparé par des hiéroglyphes). Effectivement s'il fait un fread, tout passe sans pbs, mais son premier post laisse supposer qu'il lit sa sauvegarde par un éditeur de texte directement.
 
bon, direction la douche  [:lorelei]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 30-05-2002 à 21:18:29    

Harkonnen a écrit a écrit :

Après relecture, je constate effectivement que je n'ai pas été clair sur certains trucs, mais bon il était minuit passé hein, chuis pas un robot moi  :D  
En ce qui concerne les tabulations, je suis d'accord avec toi, les '\0' ne sont pas fait pour les chiens et effectivement, il n'a pas précisé s'il souhaitait lire ou non le fichier à la console, ce que moi j'ai supposé, car il dit qu'il souhaite avoir chaque tab_mail[n] sur une ligne différente. Dans quel but si ce n'est pour une réutilisation pour la console ou un éditeur de texte ?
Je voulais aussi comme toi grouper tous les champs via fprintf, mais vu qu'apparemment il connait très peu le C, j'ai jugé préférable pour sa compréhension de séparer l'écriture champ par champ.
 
NB: j'ai pensé ma réponse entièrement en supposant qu'il relirait son fichier via un éditeur de texte, ceci pouvant expliquer certaines réponses de ma part assez bizarres (notamment le fait que chaque champ serait séparé par des hiéroglyphes). Effectivement s'il fait un fread, tout passe sans pbs, mais son premier post laisse supposer qu'il lit sa sauvegarde par un éditeur de texte directement.
 
bon, direction la douche  [:lorelei]  




 
thx all
v voir si ca marche de ce pas...
he oui g pas pu i aller avant .. exam oblig...
et sinon je m'en fout de pouvoir le lire au bloc-note ou non
juste ke pour moi ca me paraisait obliger si je voulais m'en reservir....

Reply

Sujets relatifs:

Leave a Replay

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