Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1860 connectés 

 


Dernière réponse
Sujet : avis aux amateur de C
cherchepa

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....


Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
cherchepa

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....

Harkonnen 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]
gilou

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]

Harkonnen 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]

cassidy 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 :)
cherchepa 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();
cherchepa

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);
}

Harkonnen poste ton code, ça ira beaucoup mieux
cherchepa

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]

Harkonnen

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]

deathsharp en francais ca donne quoi?
Groody y'a une section PROG exprette pour ce genre de prb. "Déplacement activé"
cherchepa thx

 

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

cherchepa 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...

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)