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);
вам придется использовать новый символ строки.В противном случае новая строка остается во входном потоке.