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