Страницы

Поиск по вопросам

среда, 22 мая 2019 г.

Объясните спецификатор

Использовал в scanf спецификатор " %[^
]" для того, чтобы мог вводить название из нескольких слов,отделенных пробелами.(посоветовали так же на форуме это спецификатор использовать), но как его объяснить.Почему в квадратных скобках? Что означает "^" крышечка? Коротко говоря подробно написать саму работу данного спецификатора.


Ответ

Читайте документацию по scanf, там все подробно написано.
Спецификатор формата вида %[что-то] означает "читать все символы, пока они принадлежат набору, указанному в квадратных скобках".
Спецификатор формата вида %[^что-то] означает "читать все символы, пока они НЕ принадлежат набору, указанному в квадратных скобках" (т.е "читать все символы, пока не наткнешься на один из указанных в квадратных скобках").
В вашем случае " %[^
]" означает: пропустить ведущие пробелы и затем читать все подряд, пока не наткнешься на '
' или '
'

Вообще-то, если речь не идет о каких-то тонкостях, связанных с обработкой символа '
', scanf с форматом " %[^
]" означает просто "пропустить ведущие пробелы и затем читать до конца строки", при этом оставляя символы конца строки непрочитанными. Это примерно то же самое, что и обычный fgets, с той только разницей, что fgets не пропускает ведущие пробелы и вычитывает из потока символы конца строки. Может быть вам лучше подойдет просто fgets и не надо городить огород с этим %[]?
Также не ясно, зачем понадобилась отдельная обработка символа '
'. Если речь идет о чтении текстового потока под Windows, то там никакого '
' уже не будет. Все маркеры конца строки будут заменены на простое '
' еще до того, как дело дойдет до scanf
Также имейте в виду, что scanf не умеет читать пустые строки. То есть если этот %[^
] сразу же наткнется на '
' или '
', то scanf тут же завершится с ошибкой, не изменив значение принимающего буфера.

Комментариев нет:

Отправить комментарий