Нет, scanf () не может быть принят для "значений по умолчанию". Вы должны получить входные данные, проверить их на пустоту и самостоятельно назначить значение по умолчанию.
Как вы узнали, scanf () сложен; Я согласен с extraneon, что fgets (), вероятно, то, что вы ищете.
Edit:
Причина, по которой scanf () не реагирует ... scanf () возвращает после него a) обработал все спецификаторы преобразования или b) обнаружил ошибку. Как и во всех спецификаторах преобразования (в данном случае "% s"), начальные пробелы пропускаются. Кроме того, "% s" читает все символы до следующего пробела .
Нажатие возврата вставляет '\ n' в стандартный ввод. Поэтому, если вы нажмете клавишу возврата до того, как введете что-либо еще (за исключением, возможно, пары символов табуляции и пробелов), scanf () пропустит ваш ввод и продолжит ждать ввода без пробелов.
Что бы вы ни вводили, scanf () не будет "видеть" его, пока вы не нажмете return, потому что ваш ввод хранится в буфере консоли. (В противном случае вы не сможете вернуться назад через ввод.) Нажатие return снова вводит "\ n" во входной поток, поэтому ваш "% s" завершается, даже если вы не входили ни в какие вкладки / пробелы в строке, которую вы ввели.
Если вы сделали ввод пробелов, ваш cMountDrivePath будет содержать только первое «слово» вплоть до первого пробела, поэтому оставление пробелов в именах каталогов или файлов делает вещи чертовски раздражающими. Это также оставило бы оставшуюся часть строки во входном буфере, поэтому в следующий раз, когда вы вызываете scanf (), он не будет немедленно запрашивать ввод, а продолжит обрабатывать то, что было буферизовано во время предыдущего вызова - еще одна досадная деталь для scanf ( ) новички, которых нужно остерегаться.
Надеюсь, это немного прояснило для вас (и для других еще впереди).