Когда цикл while запускается после первого раза, он дважды выводит приглашение «Создать новый узел», прежде чем вводить пользователя из stdin. Почему это? См. Связанное изображение.C-While-Loop Duplicating Print Statement
Код:
int main()
{
char userInput[2];
while(1)
{
printf("\nCreate new node? (y/n)\n");
printf(">>> ");
fgets(userInput, 2, stdin);
if(strcmp(userInput, "y") == 0)
{
printf("Yes\n");
}
else if(strcmp(userInput, "n") == 0)
{
printf("No\n");
exit(0);
}
}
}
Терминал Выход:
Ожидается публикация текста в виде текста, а не изображений! – Olaf
при вызове 'fgets()' всегда должен проверять (! = NULL) возвращаемое значение, чтобы гарантировать успешную операцию. – user3629249
массив: 'userInput' имеет длину всего два символа. поэтому, используя 'fgets()' только один символ за раз может быть израсходован из stdin. Это означает, что если пользователь вводит: 'n' '' '' 'будет потребляться, то в следующем цикле' 'будет потребляться, а код будет снова зацикливаться, чтобы получить следующий фактический вход пользователей. Предложите сделать 'userInput []' несколько символов дольше, например, 2 или 3 символа. –
user3629249