• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

# 処理分岐で上に跳ぶ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());

balto
質問者

お礼

お礼が遅れて申し訳ありません。 大変参考になり、問題も解決できました。 ありがとうございました。

その他の回答 (2)

回答No.3

私もNo.1さんの言ってる >endcheckがラベルと関数とに同じく使われているのが問題なのでは? が原因だと思う・・・

  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.1

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がラベルと関数とに同じく使われているのが問題なのでは?

関連するQ&A