Qubc
@Qubc
Ненавижу полисемию.

Как работает %[^\n]s?

void f(void) {
    char s[100] = {0} ;
    scanf("%[^\n]s", s);
    printf("1: %s\n", s);
    scanf("%[^\n]s", s);
    printf("2: %s\n", s);
    scanf("%[^\n]s", s);
    printf("3: %s\n", s);
}


ab cd ef gh
1: ab cd ef gh
2: ab cd ef gh
3: ab cd ef gh


Верно ли я понимаю, что первый scanf читает поток и останавливается на \n , после чего каждый последующий вызов scanf начинает чтение с этого же символа (\n) и, следовательно, моментально останавливается, тем самым не предлагая пользователю ввести следующие символы в консоль?
  • Вопрос задан
  • 378 просмотров
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Верно ли я понимаю, что первый scanf читает поток и останавливается на \n , после чего каждый последующий вызов scanf начинает чтение с этого же символа (\n) и, следовательно, моментально останавливается

Понимаешь верно. Вдобавок форматная строка %[^\n]s содержит символ s который никогда не заматчится, потому что %[^\n] останавливается на символе '\n'. Логично было бы заменить её на %[^\n]%*c чтобы работало так, как было задумано.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы