文字を入力すると、ループが無限に実行されます。文字がintとして入力されたときにゼロとして格納されますか?非数字回答を拒否することはできますか?範囲外の回答を拒否しましたか?ただ、背景Cでintを要求するときに拒否する方法
ため
int main(int argc, const char * argv[]) {
// insert code here...
int categoryToScore;
int categoryScores = 6;
printf("Enter category to save score: ");
scanf("%d", &categoryToScore);
while (categoryToScore >= categoryScores || categoryToScore <= 0) {
printf("Error: invalid command. Enter 1-5 to save to an unused category\n");
printf("Enter category to save score: ");
scanf("%d", &categoryToScore);
}
return 0;
}
私がしたい:
- 印刷要求の入力のためのscanf
- 1〜上限である入力
- 入力が正しいタイプで正しい範囲内にあるかどうかを確認してください
- それは、エラーメッセージを出力し、その後、あなたは、標準入力から数を読み取るためのscanfを求めている
scanfのは、値を返します - 成功し、スキャン要素の数 - 引数が指すものは何でもに落書きに加えを。有効な番号でないものを入力したときに戻り値をチェックすると、0になるはずです。 –
また、 'scanf()'が無効な入力のために失敗した場合、再試行する前に何らかの形で無効な文字をクリア(読みとり)しなければなりません。 – Dmitri
無効な文字(文字)が入力されたときにそれが保存され、scanfがその文字を読み込むと、ループがscanfに戻ったら同じ文字をもう一度読み込むのですか?これを避けるために、scanfがチェックしている領域をクリアする必要があるので、スキャンする前に別の入力が必要ですか? –