fscanf foireux !! [C++] - Programmation
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().
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.
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.
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 ![]() 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]
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(). |
Il a tout dit.
A+,
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 !
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
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
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
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+,
Marsh Posté le 10-03-2002 à 16:44:04
je declare un string par defaut :
ya pa moyen d'avoir un string complet
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
PLZ HELP ME