|
こんにちは。
>というプログラムが雑誌に載っていたのですが
>7行目の使い方がよくわかりません
>なくても同じ結果が得られるんです
7 : }while(m<1||m>12);
ではなくて、
6 : scanf("%*s");
の方ですね。
この書式指定の中に記述されている*は代入禁止文字と呼ばれます。
do{
printf("何月ですか?\n");
scanf("%d",&m);
}while(m<1||m>12);
とした場合、もしキーボードから「14aa」のように入力すると、
変数mには14が10進変換され代入されますが、「aa」の方はそのまま
入力バッファに残ります。すると、14が代入されたmは、
}while(m<1||m>12);
を満たすので、次の入力を取りに行きます。けれども、入力バッファ
の中には先ほど残された「aa」が入っているので、10進変換できずに
そのまま再度残されます。すると、mは14のままで、
}while(m<1||m>12);
を満たすので、次の入力を取りに行きます。・・・というように
無限ループに陥り、制御不能になります。ですから、ここで
残されてしまった「aa」のような数字以外の文字列を入力バッファから
取り出して捨てるために、scanfの戻り値が1以外の場合には、
scanf("%*s");
としています。
|