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

 


Dernière réponse
Sujet : [C] passer à la ligne avec fscanf ?
Rawhead rex 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;
}

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
Rawhead rex 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;
}
Jar Jar Je te conseille d'allouer une chaîne et d'utiliser fgets, et ensuite de faire un sscanf dessus, ça marche beaucoup mieux.
torpe23 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 !

Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR