2010-10-17 2 views
0

ont un problème avec fscanf() - il ne saute pas au mot suivant après avoir lu 10 caractères à partir du fichierfscanf() - comment faire passer au mot suivant après avoir lu les caractères n?

while(fscanf(TEXT_FILE,"%10s", str) != EOF) // reads up to 10 char into str 

S'il trouve le mot qui est supérieur à 10 caractères, il va lire 10 caractères, stockez-les dans str, continuez dans le même mot en lisant jusqu'à 10 caractères.

Comment est-ce que je spécifierais pour lire jusqu'à 10 caractères et passer au mot suivant?
Existe-t-il une alternative?

Merci!

Répondre

0

que j'ai trouvé une solution pour vous:

while(fscanf(file, "%10s%*s", str) != EOF) 

Il fonctionne sur VS 2008. Je ne sais pas si elle est standard ou non, et si votre compilateur soutiendra ou non. La partie %*s ignore la chaîne en cours (si sa longueur est supérieure à 10) jusqu'au caractère d'espace blanc suivant et consomme tous les caractères d'espacement.

3

Vous êtes probablement mieux d'utiliser fgets() et strtok(), ou d'écrire une petite boucle autour de fgetc() pour faire ce que vous voulez. fscanf() est flexible, mais ne résout pas tous les problèmes.

+0

En effet, non seulement 'fscanf()' ne résout pas tous les problèmes, il réussit aussi à créer des problèmes. –

1

Vous devrez continuer à numériser ou à appeler fgetc dans un tampon de remise à l'intérieur du corps de cette boucle jusqu'à ce que le flux ait consommé tous les caractères non-espaces restants dans ce mot. Dans le mot suivant et laisse le pointeur de fichier à la fin de ce qu'il a lu, au prochain appel, il commencera à partir de 10 caractères dans la chaîne et sachez que ce n'est pas le début d'un mot de sorte qu'il traitera les 10 caractères suivants comme un seul mot aussi ...

Voir strtok pour ce que vous voulez probablement faire.

Questions connexes