Функция scanf()
автоматически удаляет пробелы, прежде чем анализировать преобразования, отличные от символов. Форматы символов (в основном %c
; также наборы сканирования %[…]
- и %n
) являются исключением; они не удаляют пробелы.
Используйте " %c"
с начальным пробелом, чтобы пропустить необязательный пробел. Не используйте конечный пробел в строке формата scanf()
.
Обратите внимание, что это по-прежнему не использует конечные пробелы, оставшиеся во входном потоке, даже до конца строки, поэтому остерегайтесь этого, если также использовать getchar()
или fgets()
в том же входном потоке. Мы только получаем scanf, чтобы пропустить пробелы до преобразований, как это делается для %d
и других преобразований, не связанных с символами.
Обратите внимание, что «директивы» без пробелов (для использования терминология POSIX scanf ), кроме преобразований, как и текст в scanf("order = %d", &order);
, также не пропускают пробелы. Литерал order
должен соответствовать следующему символу для чтения.
Так что вы, вероятно, захотите " order = %d"
там, если вы хотите пропустить новую строку из предыдущей строки, но при этом все же требуется буквальное совпадение с фиксированной строкой, , как этот вопрос .