whileループが最初から実行されるとき、stdinからユーザー入力を取得する前に、「Create new node」プロンプトを2回印刷します。どうしてこれなの?リンクされた画像を見るC - Whileループの複製プリントステートメント
コード:
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'は2文字だけです。だから、 'fgets()'を使うと、一度に1文字だけ標準入力から消すことができます。つまり、ユーザが 'n'と入力すると、 'n'が次のループで消費され、' 'が消費され、次の実際の入力を得るためにコードが再びループします。 'userInput []'をいくつかの文字を長く、例えば2文字または3文字長くしてください。 –
user3629249