printf("enter the string"); scanf("%[^\t\n]s",str);
// как работает код abv для приема строки из нескольких слов без использования get и только с использованием scanf
[ Соответствует непустой последовательности символов из указанного набора принятых символов;следующий указатель должен быть указателем на символ, и должно быть достаточно места для всех символов в строке плюс завершающий нулевой байт.Обычный пропуск ведущих пробелов подавляется.Строка должна состоять из символов в (или не в) конкретном наборе;набор определяется символами между символом [ открытой скобки и символом ] закрывающей скобкой.Набор исключает эти символы, если первый символ после открытой скобки является окружностью (^). ... Строка заканчивается появлением символа, отсутствующего в (или с установленным круговым диафрагмой в) или когда ширина поля заканчивается.
[ Соответствует непустой последовательности символов из указанного набора принятых символов;следующий указатель должен быть указателем на символ, и должно быть достаточно места для всех символов в строке плюс завершающий нулевой байт.Обычный пропуск ведущих пробелов подавляется.Строка должна состоять из символов в (или не в) конкретном наборе;набор определяется символами между символом [ открытой скобки и символом ] закрывающей скобкой.Набор исключает эти символы, если первый символ после открытой скобки является окружностью (^).
[
]
^
...
Строка заканчивается появлением символа, отсутствующего в (или с установленным круговым диафрагмой в) или когда ширина поля заканчивается.
(Linux scanf(3) manpage.)
scanf(3)
Так что scanf считывает до первого символаэто не вкладка (\t) или новая строка (\n).Он читает пробелы.
scanf
\t
\n