Множество спецификаторов формата для scanf
пропускают начальные пробелы (например, новые строки), но не "%["
.
Таким образом, новая строка, добавляемая вами при нажатии Введите в первом входе будет первым, что прочитает следующий вызов scanf
.А с вашим форматом новая строка (или действительно, любой пробел) скажет scanf
прекратить чтение, что означает, что больше ничего не будет прочитано.Снова и снова.
Я бы скорее рекомендовал использовать fgets
для чтения строк, поскольку это также включало автоматическую защиту от переполнения буфера (при условии, что вы передали правильный размер буфера).
И если вы беспокоитесь о новой строке, добавленной fgets
, ее легко удалить с помощью функции strcspn
.
Так что лучше сделайте что-то вроде
char input[100];
while (fgets(input, sizeof input, stdin) != NULL)
{
input[strcspn(input, "\n")] = 0; // Remove possible trailing newline
if (strcmp(input, "EXIT") == 0)
break; // Exit
else
{
// Rest of code
}
}