[C/C++]pb de fscanf / fprintf

pb de fscanf / fprintf [C/C++] - Programmation

Marsh Posté le 05-11-2001 à 14:03:25    

mon fichier  conf.dat :
 
7
COM4
57600
 
 
mon code source:
 
fd = fopen("conf.dat","r" );
fscanf(fd,"%s\n",&data);
fscanf(fd,"%s\n",&com);
fscanf(fd,"%s\n",&bau);
 
Bprintf(hDlg,0,T_3,"%s",&data);
Bprintf(hDlg,0,T_2,"%s",&com);
Bprintf(hDlg,0,T_1,"%s",&baudrate);
fclose(fd)
 
les 2 premiers scanf fonctionnent tout bien mais mon dernier scanf fait freezer le tout :(
 
jobtient le meme effet en faisant des fprintf en boucle au bout d'environ 80 fprintf sur un fd ca freeze ..  
d'ou ca peut venir?  
hlp plz :cry:

Reply

Marsh Posté le 05-11-2001 à 14:03:25   

Reply

Marsh Posté le 05-11-2001 à 14:26:18    

C'est un peu cours jeune homme...
donne nous le reste de ton code...

Reply

Marsh Posté le 05-11-2001 à 14:35:18    

merde j'etais persuade qu'on mettait pas un & pour les chaines :??:

Reply

Marsh Posté le 05-11-2001 à 14:35:23    

ya que ca dans ma fonction :( c'est pour ca :cry:
jai reduit ma fonction au strict minimum mais ca merd tj
 
voiod load()
{
 FILE *fd;
 char *data,com,baudrate;  
 
 
 fd = fopen("conf.dat","r" );  
 fscanf(fd,"%s\n",&data);  
 fscanf(fd,"%s\n",&com);  
 fscanf(fd,"%s\n",&baudrate);  
 
 Bprintf(hDlg,0,T_3,"%s",&data);//routine faisant un printf dans une edit box  
 
 Bprintf(hDlg,0,T_2,"%s",&com);  
 
 Bprintf(hDlg,0,T_1,"%s",&baudrate);  
 
 fclose(fd)  
}
 
sans le fscanf(fd,"%s\n",&baudrate);
le com s'affiche nikel dans l'edit T_2
le 7 saffiche nikel dan l'edit T_3
 
avec le fscanf(fd,"%s...
ca freeze :cry:

Reply

Marsh Posté le 05-11-2001 à 14:36:26    

t'es sur qu'il y a un \n a la fin de ta 3eme chaine (conseil de cm2 mais bon...)

Reply

Marsh Posté le 05-11-2001 à 14:36:34    

Godbout > sans le & c'est frezzeee total scrontch beurp !!! (pas beau a voir koi)

Reply

Marsh Posté le 05-11-2001 à 14:38:16    

Godbout > jai essaye avec et sans le \n meme effet ai rajoute dans mon fichier .dat un\n a la fin sans effet non plus :(
 
le truc  :ouch:  c'est ke ca me freeze aussi dans la geule pour un fprintf en boucle :??:

Reply

Marsh Posté le 05-11-2001 à 14:47:15    

Houla :)
 
char *data,com,baudrate;  
 
 
fd = fopen("conf.dat","r" );  
fscanf(fd,"%s\n",&data);  
fscanf(fd,"%s\n",&com);  
fscanf(fd,"%s\n",&baudrate);  
 
 
au derniere nouvelles fscanf ne fait pas d'alloc de memoire
donc tes data & cie pointe sur rien du tout, donc ca va pas
 
 
 
 
char data[50],com[50],baudrate[50];  
 
fd = fopen("conf.dat","r" );  
fscanf(fd,"%s\n",data);  
fscanf(fd,"%s\n",com);  
fscanf(fd,"%s\n",baudrate);  
 
c pas sublime mais ca doit marcher
 
tu notera que le "&" a fait le saut dans le scanf
en effet, data tout court = &data[0], ce qui equivaut a l'adresse de la premiere case du tableau (donc tout va bien)
 
edit :  
char *data,com,baudrate;  
 
huh fait gaffe aussi, la seul "data" est pointeur sur caractere...

 

[edtdd]--Message édité par chrisbk--[/edtdd]

Reply

Marsh Posté le 05-11-2001 à 14:48:09    

merde j'suis con c'est normal (ou alors j'suis gol :crazy:)
 
Pour les chaines il ne faut effectivement pas mettre de &.
Essaye en les enlevant et en faisant
 
char data[255];
memset(data, 0, 255);
 
pareil pour les 3 char

Reply

Marsh Posté le 05-11-2001 à 14:48:43    

merde encore grillaid, en + by the master :D

Reply

Marsh Posté le 05-11-2001 à 14:48:43   

Reply

Marsh Posté le 05-11-2001 à 14:49:42    

Godbout a écrit a écrit :

merde j'suis con c'est normal (ou alors j'suis gol :crazy:)
 
Pour les chaines il ne faut effectivement pas mettre de &.
Essaye en les enlevant et en faisant
 
char data[255];
memset(data, 0, 255);
 
pareil pour les 3 char  




 
roooooh je le reconnais ce memset :D

Reply

Marsh Posté le 05-11-2001 à 14:52:24    

c'est ma fonction preferee maintenant :D

Reply

Marsh Posté le 05-11-2001 à 14:52:51    

warrfff moi ki me fesait pas chier a mallocer :lol:  
bon c'est repartit ..... thx :bounce:
 
 
et pour les fprintf  
 
fd = fopen("toto.txt","w" );
for(i = 0 ; i < 300; i++)
  fprintf(fd,"%s\n","toto" );
fclose(fd);
 
la aussi ca frezze au bout d'environ 80 lignes pourtant ya pas de mallocage a faire :??:

Reply

Marsh Posté le 05-11-2001 à 14:54:02    

fd = fopen("toto.txt","w" );
for(i = 0 ; i < 300; i++)
  fprintf(fd,"%s\n",toto);
fclose(fd);
 
pas de "" a toto !!

Reply

Marsh Posté le 05-11-2001 à 14:56:18    

avec ou sans ca freeze :( mais obn c'est une autre histoire :/

Reply

Marsh Posté le 05-11-2001 à 14:57:50    

si je me trompe pas deja pour les fichiers textes c'est "rt" pour la lecture et "wt" pour l'ecriture

Reply

Marsh Posté le 05-11-2001 à 15:04:02    

zarb ton truc
meme un  
 
for (int i=0;i<300;i++)
{
fprintf(fd,"pouet" );
}
 
coince ?

Reply

Marsh Posté le 05-11-2001 à 15:04:33    

sinon c koi ta variable toto ?
c bien une chaine de caractere se finissant par \0 ?

Reply

Marsh Posté le 05-11-2001 à 15:12:22    

oui toto est bien une chaine dde char terminant par \0
 
pour le wr rt => voir msdnc'est bien w et r :p
 
pour le fprintf(fd,"toto" ); jessaye et je vous tien au courant

Reply

Marsh Posté le 05-11-2001 à 15:22:45    

bon pour le fpritf ca a lair de bien fonctioner en dehors de mon programme :/
 
en gros ce ke je fait  
dans le  
   WM_INITDIALOG:
      je fait mon fopen
   WM_TIMER:
      je fait mes differente op d'ecriture
   ID_CANCEL
      je fait mon fclose
 
 
donc je suis environ 30 a 40 secondes avec un fd ouvert et je fait de op d'ecriture a des temps plus ou moin long allant de l'instantane a la minute entre 2op d'ecriture

Reply

Marsh Posté le 05-11-2001 à 15:24:29    

question con :
 
ta variable fd est bien declare en static ou en global ?

Reply

Marsh Posté le 05-11-2001 à 15:30:43    

fd est un FILE *fd;
 dans ma fonction donc pas global est ce que un FILE * est un static :??: jai pas ete voir mais pense ke si :/
 
si c'est ca je me jette par la fenetre car le je suis trop une merde ..... :cry: :cry: (ca vas je suis au 1er et en desous c'est de la pelouse :p )

Reply

Marsh Posté le 05-11-2001 à 15:33:57    

huh :)
 
a priori ton fd est plus initialise correctement (tu l'init dans le WM_INITDIALOG, et tu ecrit dans le WM_TIMER, c a d qu'entre tps tu es sorti puis rerentre dans ta fonction)
 
essaye avec :
 
static FILE *fd;
 
a la place de  
FILE *fd;

Reply

Marsh Posté le 05-11-2001 à 15:36:28    

c'est decidé je saute  :sweat:  
 
ca me vaut rien les week de 4J ca rapporte de bleux  
 
je reviens dans 5min le temps de sauter et revenir

Reply

Marsh Posté le 05-11-2001 à 15:37:08    

a+ :D

Reply

Marsh Posté le 05-11-2001 à 15:57:37    

me reffla  :pt1cable:  meme fa mal

Reply

Marsh Posté le 05-11-2001 à 16:00:30    

ah la la?
pourquoi tu vas pas chercher un bouquin pour apprendre le C ca irait plus vite, non??
 
LEGREG
ps: en tout cas c'est plus efficace que de risquer de se casser le coup en se defenestrant (aka installation de linux :) )

 

[edtdd]--Message édité par legreg--[/edtdd]

Reply

Marsh Posté le 05-11-2001 à 16:13:12    

ben en fé a pas fait goof ces 2 trucs le savait le coup du malloc et le coup du static c'est pour ca glouuppppsss ...
je suis une merdeuuuuuuu    :cry:  :cry:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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