pb c

pb c - C++ - Programmation

Marsh Posté le 15-05-2002 à 11:43:29    

voivi un petit probleme dont je suis sur que vous me donnerez la
solution rapidement vu que vous etes tres balaises.
 
le programme est en C, il s'agit de lire des donnes sur une ligne dans
un fichier
 
/* variables locales :
FILE    *FemFile;
float        nombre;
char        caractere;
 
/* On ouvre le fichier en lecture:
FemFile=fopen("test1.fem" )
 
/* on doit lire un blanc, un reel, puis des caracteres jusqu'a ce qu'on
arrive en fin de ligne
/* le but est d'ecrire le reel
fscanf(FemFile,"%c",&caractere);
fscanf(FemFile,"%f",&nombre);
printf("%f",nombre);
do
{
    fscanf(FemFile,"%c",&caractere)
} while(strcmp(&caractere,"\n" )!=0);
 
Et la, le test d'arret ne marche pas, il continue a lire indefiniement
les caracteres sur les autres lignes
Alors que si on ecrit le 1er blanc ( printf(FemFile,"%c",caractere) ) a
la place du reel, le test d'arret fonctionne.
 
Etrange, non ?

Reply

Marsh Posté le 15-05-2002 à 11:43:29   

Reply

Marsh Posté le 15-05-2002 à 12:12:44    

Il y a un truc qui m'interpelle dans ton source...
 
Quand te déplaces tu dans le fichier ?? C'est bien beau de lire des caractères, mais il faut parcourir le fichier pour lire les autres...
 
fseek()


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 15-05-2002 à 12:26:16    

cooltwan a écrit a écrit :

voivi un petit probleme dont je suis sur que vous me donnerez la
solution rapidement vu que vous etes tres balaises.
 
le programme est en C, il s'agit de lire des donnes sur une ligne dans
un fichier
 
/* variables locales :
FILE    *FemFile;
float        nombre;
char        caractere;
 
/* On ouvre le fichier en lecture:
FemFile=fopen("test1.fem" )
 
/* on doit lire un blanc, un reel, puis des caracteres jusqu'a ce qu'on
arrive en fin de ligne
/* le but est d'ecrire le reel
fscanf(FemFile,"%c",&caractere);
fscanf(FemFile,"%f",&nombre);
printf("%f",nombre);
do
{
    fscanf(FemFile,"%c",&caractere)
} while(strcmp(&caractere,"\n" )!=0);
 
Et la, le test d'arret ne marche pas, il continue a lire indefiniement
les caracteres sur les autres lignes
Alors que si on ecrit le 1er blanc ( printf(FemFile,"%c",caractere) ) a
la place du reel, le test d'arret fonctionne.
 
Etrange, non ?  




&caractere est l'adresse d'un char. Ca en fait pas une chaine C.
Compares plutot caractere et '\n'.
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 15-05-2002 à 15:08:41    

Harkonnen a écrit a écrit :

Il y a un truc qui m'interpelle dans ton source...
 
Quand te déplaces tu dans le fichier ?? C'est bien beau de lire des caractères, mais il faut parcourir le fichier pour lire les autres...
 
fseek()  




 
euh ... nan le pointeur se deplace tout seul quand tu lis un fichier ...

Reply

Marsh Posté le 15-05-2002 à 15:10:11    

gilou a écrit a écrit :

 
&caractere est l'adresse d'un char. Ca en fait pas une chaine C.
Compares plutot caractere et '\n'.
A+,  




 
ouais, genre while(caractere!='\n';), c bcp plus simple et beaucoup plus juste
vu que &caractere est une chaine de 1 caractere non terminée par un \0, il lit dans la memoire jusqu'a en trouver un .... pas tres bo ca  :D

Reply

Marsh Posté le 15-05-2002 à 15:12:58    

Autant pour moi... [:wolfman]  
 
Plus l'habitude du C standard, vraiment plus.... Les RAD ont eu raison de moi... va falloir que je m'y remette  :heink:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-05-2002 à 01:21:03    

HappyHarry a écrit a écrit :

 
 
ouais, genre while(caractere!='\n';), c bcp plus simple et beaucoup plus juste
vu que &caractere est une chaine de 1 caractere non terminée par un \0, il lit dans la memoire jusqu'a en trouver un .... pas tres bo ca  :D  




En fait, non, il lit au maximum les 2 premiers caracteres pointes par &caractere, puisque il trouve un 0 comme second caractere de "\n".
A+,

Reply

Sujets relatifs:

Leave a Replay

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