passer à la ligne avec fscanf ? [C] - Programmation
Marsh Posté le 03-03-2002 à 22:53:15
Je te conseille d'allouer une chaîne et d'utiliser fgets, et ensuite de faire un sscanf dessus, ça marche beaucoup mieux.
Marsh Posté le 04-03-2002 à 12:31:39
Le probleme du fscanf c'est que ta chaine de descripteur doit respecter exactement la syntaxe du fichier que tu lis.
Avec le code que tu vient de donner et le fichier texte suivant, ca pose probleme :
1:2:3:4
5:6:7:8
Car la syntaxe n'est pas respectee par ton descripteur "%d:%d:%d\n"
2 possibilites :
-soit tu avance ton pointeur 'p_fich' a la main avec un fseek() si ton fichier a lire est suffisamment bien formate.
-soit tu bufferise le reste de ta ligne en la stockant dans une chaine de caractere, mais ca ne marchera que si tu n'a pas d'espace(ou alors il faut que tu rajoute autant de variables buffer que necessaire)
Exemple:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv)
{
int a=0, h,m,s;
FILE* p_fich;
char buffer[100];
p_fich=fopen("test.txt","r" ) ;
while(a<5)
{
fscanf(p_fich,"%d:%d:%d%s\n",&h,&m,&s,buffer);
printf("%d:%d:%d:%s\n",h,m,s);
printf("buffer:%s\n",buffer) ;
a++;
}
return 1;
}
Marsh Posté le 03-03-2002 à 20:46:18
Je lis dans un fichier, qqu'uns des premiers mots ( enfin, ici, ce sont des entiers ! ), mais après, je voudrais passer à la ligne directement :
while(a<8)
{
fscanf(p_fich,"%d:%d:%d\n",&h,&m,&s);
printf("%d:%d:%d:%s\n",h,m,s);
a++;
}
donc je fais un \n. Le pb, c'est que ça ne marche pas, il reste tjs à la même ligne !
que faire ?
merci d'avance !