ループを終了するための唯一の方法です。つまり、a == 0
とa == 1
が同時に終了することができます。それはもちろん不可能なので、ループは決して終了しません。
あなたは時にユーザー入力1
または0
終了するためにループにしたい場合は、あなたがそこに論理オペレータを必要とする:
do
{
puts("Give 1 or 0 for input:");
scanf("%d",&a);
} while(a!=0 && a!=1);
それはさておき、あなたが本当にscanf
の戻り値をチェックしなければならない、と失敗した場合に入力ストリームをパージします。文字を入力すると、scanf
はそれが失敗したことを示しますが、文字は入力ストリームに残ります。それ以降の反復は、その文字を読み込もうとすると固まってしまいます。
scanf
自体と%*s
のフォーマット指定子を使用する方法があります。
do
{
puts("Give 1 or 0 for input:");
int read_res = scanf(" %d",&a);
if (read_res != 1)
scanf("%*s");
} while(a != 0 && a != 1);
フォーマット文字列にアスタリスクがscanf
はまだ任意の非空白文字にマッチし、ストリームからそれらを削除、何でも(そう余分なパラメータが必要とされない)にそれらを割り当てるしようとしないだろうことを意味します。数字の前にある先頭の空白を無視するために、先頭の空白を%d
に追加しました。
あなたの|| && –
1または0に似た値を残して申し訳ありませんが、私は尋ねているものです。 – bazuka
もし私が|| a!= 1 halfまたはa!= 0 ||それはうまく動作します。 – bazuka