Есть ли способ использовать fscanf для чтения в следующем пробеле? - PullRequest
2 голосов
/ 04 марта 2012

Следующее будет считываться только до появления следующего пробела, исключая его

fscanf (list_in, "%s", keywords);

1 Ответ

4 голосов
/ 04 марта 2012

Если я правильно понимаю ваш вопрос, вы можете использовать класс символов :

fscanf( list_in, "%[^ \r\n\t]", keywords );

Конечно, чтобы избежать переполнения буфера, вы всегда должны устанавливать максимальную длину при чтении строкс (f) scanf, как в:

char keywords[81];

fscanf( list_in, "%80[^ \r\n\t]", keywords );

Редактировать: Если вы хотите включить завершающий пробел в строке, вы можете прочитать его отдельно в char, используя директиву %c, и либо обработайте ее таким образом, либо добавьте в строку:

char keywords[82], space;
int n;

fscanf( list_in, "%80[^ \r\n\t]%c", keywords, &space );

n = strlen( keywords );
keywords[n] = space;
keywords[n+1] = '\0';

(Конечно, чтобы быть особенно осторожным, вам также следует проверить возвращаемое значение fscanf, чтобы убедиться, что вы, например, не достигли конца входного файла.)

...