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

 


Dernière réponse
Sujet : [C++] fscanf foireux !!
gilou

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+,


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
gilou

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+,

Ded Jay 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 :)
Ded Jay 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
Ded Jay 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
El_gringo ç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:
gilou

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+,

gilou

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]

antp 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.
LetoII 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.
torpe23 fais un fgets
youdontcare 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().
Ded Jay 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

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