avis aux amateur de C - Programmation
Marsh Posté le 29-05-2002 à 19:47:52
thx
[jfdsdjhfuetppo]--Message édité par cherchepa le 29-05-2002 à 19:48:11--[/jfdsdjhfuetppo]
Marsh Posté le 29-05-2002 à 19:47:57
y'a une section PROG exprette pour ce genre de prb. "Déplacement activé"
Marsh Posté le 29-05-2002 à 19:53:33
en francais ca donne quoi?
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....
Citation : |
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]
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....
|
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]
Marsh Posté le 29-05-2002 à 20:01:41
poste ton code, ça ira beaucoup mieux
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);
}
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();
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
Marsh Posté le 30-05-2002 à 00:07:52
Allez, le dépannage de minuit avant d'aller au pieu
Déja, évite ce genre de manip:
Code :
|
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 :
|
ainsi, ça devrait aller beaucoup mieux !
De plus, évite les variables globales dans tes sources, c'est mal
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
A+
[jfdsdjhfuetppo]--Message édité par Harkonnen le 30-05-2002 à 00:10:36--[/jfdsdjhfuetppo]
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éja, évite ce genre de manip:
|
Euh, non:
A partir du moment ou il va faire un
Code :
|
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 |
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 :
|
sera plus efficace qu'une ecriture champ a champ.
A+,
[jfdsdjhfuetppo]--Message édité par gilou le 30-05-2002 à 05:35:50--[/jfdsdjhfuetppo]
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
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
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 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 |
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....
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...