[C++] fscanf foireux !!

fscanf foireux !! [C++] - Programmation

Marsh Posté le 10-03-2002 à 16:44:04    

je declare un string par defaut :
 
char string[] = "c un string";
 
pui je voudrai le modifié par un autyre string d'un fichier
 
fscanf (stream,"%s",&string);
 
ce systeme fonctionne si il n'y a pa d'espace ds le string du fichier, si il y a un espace, il me nie le reste du string donc je sui obligé d'écrire
 
fscanf (stream,"%30s",&string);
 
et ce pour lui expliker ke je veux 30 characteres, mé là encore il merde si il ya un espace, donc g trouvé une troisieme possibilité
 
fscanf (stream,"%[^\n]s",&string);
 
et ce pour lui dire k'il doit prendre ts les characteres jusk'o \n et une fois de plus il merde :(
 
g essayé d variantes  
 
%30[^\n]s
%[\n]
 
mé ca merde tjs :( ya pa moyen d'avoir un string complet
 
PLZ HELP ME

Reply

Marsh Posté le 10-03-2002 à 16:44:04   

Reply

Marsh Posté le 10-03-2002 à 16:58:55    

fscanf() c'est pour lire une chaîne dont tu connais le contenu exact. si tu veux lire un truc moins carré, lis ton fichier dans un buffer (avec fread() ) et débrouille-toi avec. c'est pas bien dur et surtout plus rapide que de multiples fscanf().

Reply

Marsh Posté le 10-03-2002 à 19:30:45    

fais un fgets

Reply

Marsh Posté le 10-03-2002 à 20:09:29    

Je confirme: fgets est la bonne solution, ça te prend toute la ligne jusqu'au \n (pour unix \r\n pour windows) et ça te met ça dans une string.


---------------
Le Tyran
Reply

Marsh Posté le 10-03-2002 à 23:30:54    

puis y a pas mal d'erreur là:
 
char string[] = "c un string";
 
ensuite tu lis 30 caractères, mais string n'en contient pas 30 mais 11 (+ le 0 de fin de chaîne)
 
puis dans le scanf tu dois mettre string et pas &string, vu que c'est un tableau c'est déjà une adresse.


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

Marsh Posté le 11-03-2002 à 04:45:49    

ded jay a écrit a écrit :

je declare un string par defaut :
 
char string[] = "c un string";
 
pui je voudrai le modifié par un autyre string d'un fichier
 
fscanf (stream,"%s",&string);
 
ce systeme fonctionne si il n'y a pa d'espace ds le string du fichier, si il y a un espace, il me nie le reste du string donc je sui obligé d'écrire
 
fscanf (stream,"%30s",&string);
 
et ce pour lui expliker ke je veux 30 characteres, mé là encore il merde si il ya un espace, donc g trouvé une troisieme possibilité
 
fscanf (stream,"%[^\n]s",&string);
 
et ce pour lui dire k'il doit prendre ts les characteres jusk'o \n et une fois de plus il merde :(
 
g essayé d variantes  
 
%30[^\n]s
%[\n]
 
mé ca merde tjs :( ya pa moyen d'avoir un string complet
 
PLZ HELP ME  




fscanf ne foire pas, mais marche exactement comme prévu:
fscanf découpe l'input (pour un %s) en chaînes de caractères séparées par un/des blancs.
Avant de raler il faudrait peut etre lire la doc.
"c un string" en input sera considere comme constitue de 3 chaines, "c" "un" et "string". C'est d'ailleuurs exactement selon ce principe que les arguments de main() sont traites.
A+,

 

[jfdsdjhfuetppo]--Message édité par gilou--[/jfdsdjhfuetppo]


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻
Reply

Marsh Posté le 11-03-2002 à 04:46:47    

youdontcare a écrit a écrit :

fscanf() c'est pour lire une chaîne dont tu connais le contenu exact. si tu veux lire un truc moins carré, lis ton fichier dans un buffer (avec fread() ) et débrouille-toi avec. c'est pas bien dur et surtout plus rapide que de multiples fscanf().  




 :jap: Il a tout dit.
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻
Reply

Marsh Posté le 11-03-2002 à 08:56:58    

ça m'énerve les types qui se remettent jammais en cause: Quand ça marche pas, ça peut pas être eux. évidement, c langage qui à été mal conçu si qqch ne marche pas ! :fou:

Reply

Marsh Posté le 12-03-2002 à 18:35:08    

g pa di ke le compilateur était foireux, g di ke g essayé ttes les facons ki étaient en ma connaissance et ca marchait pas, c pourkoi je vien demander de l'aide sur le forum

Reply

Marsh Posté le 12-03-2002 à 18:37:13    

qd o fread(), on est obligé de savoir la longueur exact de la chaine à lire, et ds mon fichier, c pluto variable
 
et le scanf ki prend 3 chaines, c bien joli de savoir ca mé ca réponpa à ma kestion

Reply

Marsh Posté le 12-03-2002 à 18:37:13   

Reply

Marsh Posté le 12-03-2002 à 18:40:47    

et pour finir g réussi à trouver la soluce, l'idée du buffer était la bonne :
 
char buf[MAX];
 
fscanf (stream,"%[^\n]s",&buf);
strcpy (string,buf);
 
et là ca marche nikel :)

Reply

Marsh Posté le 12-03-2002 à 20:46:49    

ded jay a écrit a écrit :

et pour finir g réussi à trouver la soluce, l'idée du buffer était la bonne :
 
char buf[MAX];
 
fscanf (stream,"%[^\n]s",&buf);
strcpy (string,buf);
 
et là ca marche nikel :)  




strncpy (string,buf,MAX);  
ca devrait limiter certains risques, a supposer que string a une taille egale a MAX aussi.
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻
Reply

Sujets relatifs:

Leave a Replay

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