scanf("%s"
читает слово, разделенное пробелами, НЕ строку. Таким образом, он пропускает любые начальные пробелы на вводе, а затем читает непробельные символы до (и не включая) следующего символа пробела. Поскольку символ новой строки является пробелом, он завершит этот процесс, но любой другой пробел также завершит его.
scanf("%c"
считывает один символ без пропуска любого пробела (так же, как и getchar). Тот факт, что он не пропускает пробелы, означает, что если вы используете его сразу после scanf("%s"
, вы получите любой пробельный символ, заканчивающийся первым сканированием.
Если вы хотите прочитать строку, используйте fgets
или getline