fscanf и символ новой строки

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

name1=option1;
name2=option2;
...

Так что в основном я делаю

fscanf(configuration,"%[^=]=%[^;];",name,option);

где конфигурация-это поток файлов, а имя и опция-это буферы программирования.

проблема в том, что буфер имен содержит символ новой строки, который мне не нужен. Есть ли спецификатор формата, который я пропустил в "[^...]" пропустить символ новой строки? В любом случае, может ли это быть решается через спецификатор формата когда-либо?

BTW: проглатывание символа новой строки, написав это

"%[^=]=%[^;];n"

не elegent я думаю, что символ новой строки может повторяться более одного раза в любом месте.

3 ответов


просто добавьте пробел в конце строки формата:

"%[^=]=%[^;]; "

это съест все пробелы, включая новые строки.

цитата из cplusplus.com:

символ пробела: функция будет читать и игнорировать любые символы пробела, встречающиеся перед следующим символом без пробела (символы пробела включают пробелы, символы новой строки и вкладки-см. isspace). Один пробел в строке формата проверяет любое количество символов пробелов, извлеченных из потока (включая none).


альтернативой является использование fgets() чтобы прочитать всю строку в строку, используйте sscanf(). Это имеет преимущество в отладке в том, что вы можете точно видеть, над какими данными работает функция.


Это будет работать:

fscanf(configuration,"%[^=]=%[^;];%[^\n]",name,option,dummy);

вам придется использовать новый символ строки.В противном случае новая строка остается во входном потоке.