- ベストアンサー
C++での、if命令の使い方
終了の確認をする言葉を出力して、Y/Nで答えてもらい、ifで判定するような処理を書いてみたのですが、どうもうまく行きません。 実行するとYかNを入力するように出てくるのですが、YやN、関係のない文字を押したときも「endcheck:」に戻ってしまいます。 どのように修正すればよろしいでしょうか? -------略--------- endcheck: cout << "終了しますか?Y/N\n\n\n"; cin >> endcheck; //終了しないときは戻る if (endcheck == "n" || endcheck == "N") goto start; //「start」のラベルは上の方にあります //終わるときは下の方に飛ぶ if (endcheck == "y" || endcheck == "Y") goto end; //Y/N以外を押した場合はendcheck:に戻る goto endcheck; end: return 0; }
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
# 処理分岐で上に跳ぶgoto…。 // 終了判定を関数化 bool wanna_continue() { string input; for(;;) { cout << "終了しますか?Y/N\n\n\n"; cin >> input; if(input == "n" || input == "N") { return true; // 終了:No -> 継続 -> while(true) } else if(input == "y" || input == "Y") { return false; // 終了:Yes -> 終了 -> while(false) } } } ** *** *** ** // 呼び元の処理をループに変更 do { // ...処理 } while(wanna_continue());
その他の回答 (2)
- Missing0001
- ベストアンサー率41% (5/12)
私もNo.1さんの言ってる >endcheckがラベルと関数とに同じく使われているのが問題なのでは? が原因だと思う・・・
- asuca
- ベストアンサー率47% (11786/24626)
char moji; endcheck: cout << "終了しますか?Y/N\n\n\n"; cin >> moji; //終了しないときは戻る if (moji == "n" || moji == "N") goto start; //「start」のラベルは上の方にあります //終わるときは下の方に飛ぶ if (moji == "y" || moji == "Y") goto end; //Y/N以外を押した場合はendcheck:に戻る goto endcheck; end: return 0; endcheckがラベルと関数とに同じく使われているのが問題なのでは?
お礼
お礼が遅れて申し訳ありません。 大変参考になり、問題も解決できました。 ありがとうございました。