fscanf () - как заставить его перейти к следующему слову после прочтения n символов? - PullRequest
0 голосов
/ 18 октября 2010

Возникла проблема с функцией fscanf () - она ​​не пропускает следующее слово после чтения 10 символов из файла

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

Если он найдет слово длиной более 10 символов, он прочтет 10 символов, сохранит их в str, продолжит в том же слове читать до 10 символов.

Как мне указать чтение до 10 символов и перейти к следующему слову?
Есть ли альтернатива?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 18 октября 2010

Возможно, вам лучше использовать fgets() и strtok() или написать небольшой цикл вокруг fgetc(), чтобы делать то, что вы хотите. fscanf() гибкий, но не решает всех проблем.

1 голос
/ 18 октября 2010

Вам придется продолжить сканирование или вызов fgetc в одноразовый буфер внутри тела этого цикла, пока поток не поглотит все оставшиеся непробельные символы в этом слове.

fscanf просто просматривает до 10 символов в следующем слове и оставляет указатель файла в конце прочитанного, при следующем вызове он будет начинаться с 10 символов в строку и знает, что это не так начало слова, поэтому следующие 10 символов будут рассматриваться как одно слово ...

см. strtok о том, что вы, вероятно, хотите сделать.

0 голосов
/ 18 октября 2010

Я нашел для вас решение:

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

Он работает на VS 2008. Я не уверен, является ли он стандартным или нет, и будет ли ваш компилятор поддерживать его или нет. Часть %*s пропустит текущую строку (если ее длина больше 10) до следующего символа пробела и будет использовать все символы пробела.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...