Я запускаю следующую программу на c

char str[80] = "String";
printf("hello %s\n", str);
scanf("%s", str);
printf("%s\n", str);
scanf("%[ABCDEF]", str);
printf("hello %s\n", str);

return 0;

По какой-то причине в строке 5, когда предполагается ввод из шаблона% [ABCDEF], консоль просто печатает предыдущую строку (ввод из строки 3). Почему это так?

c
0
rakkshit 10 Май 2021 в 19:17

1 ответ

Лучший ответ

Причина в том, что первый вызов scanf не читает символ новой строки, а второй вызов scanf просто читает этот символ новой строки. Чтобы избежать этого, начинайте строку формата с пробела, подобного этому:

#include <stdio.h>

int main(void)
{
    char str[80] = "String";

    printf("hello %s\n", str);
    scanf("%s", str);
    printf("%s\n", str);
    scanf(" %[ABCDEF]", str);
    printf("hello %s\n", str);

    return 0;
}

Однако вам также необходимо убедиться, что str не переполняется, если пользователь вводит строку длиной более 79 символов.

4
August Karlstrom 10 Май 2021 в 18:08