- ベストアンサー
IF文で戻ることはできますか?(C++です)
例えば cin >> A; if(A > 100 || A <0 ){ cout << "MISS"; } とあったとします。 もし、MISS表示になってしまった後、またcinにもどるにはどうすればいいですか? 初歩的な質問ですみません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
既に回答がありますが、プログラムの「気持ち」は、 ・入力された値が不正である間、再入力を求める ・不正な入力に対しては、その旨表示する ということでしょうから、関数を使って、それぞれを分離すると、見通しが良くなることがあります。 bool isOK(int a) { if (a >= 0 && a <= 100) return true; else { std::cout << "MISS"; return false; } } do{ std::cin >> a; } while(! isOK(a)); この方法のもうひとつの利点は、「入力が妥当」という判断を将来変更する場合に、柔軟に対応できるということです。 たとえば、 ・0 から 100 の値が正常 ・3回失敗したら、もしかしたら入力条件を忘れているのかもしれないから、改めて表示 ・でも、30回も入力したら、強引に 50にして継続 などということも、main の流れを乱さずに対応可能という点です。
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
「if文で戻る」ことは不可能で, 「ほかの何か」が必要. redo: cin >> A; if (A > 100 || A < 0) { count << "MISS"; goto redo; } でもできる. でも, 変数名が大文字だったりするのは気に入らないし, 比較の順序も気持ち悪い.
お礼
お礼が遅れてすみません。 このプログラムは課題の中のif文に疑問をもったのでだいぶてきとうなものにしてしました。お気に召さないのに回答していただきありがとうございます。 比較の順序等また、考え直してみます。 回答ありがとうございました。
- Wr5
- ベストアンサー率53% (2173/4061)
いくつか方法はありますが…… endflag = 0; while(!endflag) { cin >> A; if(A > 100 || A < 0){ cout << "MISS"; } else { endflag = 1; } } while(1) { cin >> A; if(A > 100 || A < 0){ cout << "MISS"; } else { break; } } do { cin >> A; if(A > 100 || A < 0){ cout << "MISS"; } } while(A > 100 || A < 0); などなど…
お礼
ありがとうございます。 今、プログラム書いてて疑問におもったので。 参考にさせていただきます。 また機会があればよろしくお願いします。 回答ありがとうございました。
お礼
お礼が遅れてすみません。 詳しい回答ありがとうございました。 このアドバイスをもとにまた自分でプログラムを作成していきたいと思います。 本当に詳しく、ありがとうございました。