私は整数入力を必要とするプログラムに取り組んでいますが、非整数が誤って入力されるたびに、scanf関数は動作を停止するか、ループでスタックされます。 scanfを使用して整数のみを入力しますか?
この
は私がしようとしたものの一例である:int n;
printf("please enter 0 or 1\n");
top:
scanf("%i",&n);
if(n == 0)
{
printf("you entered 0!\n");
}
if(n == 1)
{
printf("you entered 1!\n");
}
if(n != 0 && n != 1)
{
printf("please enter either 0 or 1.");
goto top;
}
第三に、あなたが右の番号を入力していない場合には、先頭に戻ってあなたを送信している場合、これは文字では動作しません。その他の文字。 整数でない入力があった場合、どのように先頭に戻すことができますか?
ダッジにそれを試してみてください(マニュアルページを調べてください: 'scanf'ファミリーの関数戻り値は何ですか?)必要なものが得られない場合は、入力文字列をダンプして別の文字列を取得してください。 –
"非整数入力が与えられた場合、どのように先頭に戻すことができますか?" - >非整数を読み取り、最初にそれを投げ捨てる。 – chux
'scanf()'の戻り値をチェックして、入力が数値でないなどエラーが発生したときを認識する必要があります。このようなマッチングエラーが発生すると、標準入力から少なくとも1文字を読み込まなければなりません。つまり、 'scanf()'が現在窒息しています。そうでなければ、次の試行で問題を引き起こします。 –