アプリ版:「スタンプのみでお礼する」機能のリリースについて

例えば
cin >> A;
if(A > 100 || A <0 ){
cout << "MISS";
}
とあったとします。
もし、MISS表示になってしまった後、またcinにもどるにはどうすればいいですか?
初歩的な質問ですみません。

A 回答 (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 の流れを乱さずに対応可能という点です。
    • good
    • 0
この回答へのお礼

お礼が遅れてすみません。
詳しい回答ありがとうございました。
このアドバイスをもとにまた自分でプログラムを作成していきたいと思います。
本当に詳しく、ありがとうございました。

お礼日時:2010/12/19 00:54

「if文で戻る」ことは不可能で, 「ほかの何か」が必要.


redo:
cin >> A;
if (A > 100 || A < 0) {
count << "MISS";
goto redo;
}
でもできる.

でも, 変数名が大文字だったりするのは気に入らないし, 比較の順序も気持ち悪い.
    • good
    • 0
この回答へのお礼

お礼が遅れてすみません。
このプログラムは課題の中のif文に疑問をもったのでだいぶてきとうなものにしてしました。お気に召さないのに回答していただきありがとうございます。
比較の順序等また、考え直してみます。
回答ありがとうございました。

お礼日時:2010/12/19 00:52

いくつか方法はありますが……




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);

などなど…
    • good
    • 0
この回答へのお礼

ありがとうございます。
今、プログラム書いてて疑問におもったので。
参考にさせていただきます。

また機会があればよろしくお願いします。
回答ありがとうございました。

お礼日時:2010/12/15 14:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!