gcc を使用して Linux にコンパイルする場合、ユーザーが何らかの回答を入力するたびに、プログラムは別の反復でコードの同じ部分に到達しますが、ユーザーの入力を待たず、代わりに scanf 関数に改行をフィードします。 program print 'わかりません!' 毎回...プログラムは動作しますが、それでも、ユーザーの回答とは関係なく、「わかりません!」と書きたくありませんでした。これがコードの特定の部分です。
do
{
printf("\n\nAnswer: (y/n) ");
scanf("%c", &ans);
//printf("\n->%c<-\n", ans); //just for debugging
if (ans == 'y')
{
age += v[0];
}
else if (ans != 'n')
{
printf("\nI don't get it!\n");
}
} while (ans != 'y' && ans != 'n');
これらは宣言です:
char v[64];
char ans;
(この do..while ループは 'for' 内にあります) さらに困惑するのは、プログラムが Windows で期待どおりにコンパイルおよび実行されるという事実です... (MinGW を使用) fflush(stdin を使用してみました) scanf の前および/または後ですが、役に立ちませんでした。重要な観察は、最初にこの質問に到達したときに期待どおりに動作することです。
(ユーザーが答える前に)
回答: (y/n)
わかりません! // これは毎回書き込まれますが、最初の答え: (y/n) n
あなたは21歳です!
ユーザーが無効な入力を書き込んだ場合:
答え: (y/n) w
理解できません!
回答: (y/n) // この行と次の行は印刷されるべきではあり
ません。わかりません!回答: (y/n)
//(現在はユーザー入力を待機しています)
何か案は?
編集
修正しました:(追加で宣言しましたchar buf[50]
)
do
{
printf("\n\nAnswer: (y/n) ");
fgets(buf, 50, stdin);
sscanf(buf, " %c", &ans);
if (ans == 'y')
{
age += v[0];
}
else if (ans != 'n')
{
printf("\nI don't get it!\n");
}
} while (ans != 'y' && ans != 'n');
誰かがscanfの問題を教えてもらえますか?