相変わらず初歩的質問で申し訳ありません。
Visual Studio 2008 Standard on Vista BusinessでConsole Applicationで以下のテスト
をしました。
#include <iostream>
#include <string>
int main(void) {
string str = ";
bool flag = true;
while (flag) {
if (str == exit) {
flag = false; //これでwhileから抜けるだろう
}
std::cin >> str;
}
char ch = 'a';
while (ch != 'e') {
std::cin >> ch;
}
return 0;
}
でも、実際にはexitと打ってもwhile loopから抜けません
そこで、
while (flag) {
if (str == exit) {
flag = false;
break; //これだったらwhileから抜けるかな?
}
std::cin >> str;
}
としても、二回exitを打たねば終了しません。何か根本的間違いをしていて、それに気
付かない自分が怖いので、恥ずかしいですがご教授お願いします。
デバッグモードで追ってみれば一発なんですが。。。
>std::cin >> str;
をif文の前に持っていくだけでは?
ループ条件真、継続
↓
if文偽、flag = true
↓
std::cin、exit入力
↓
ループ条件真、継続
↓
if文真、flag = false
↓
std::cin、何か入力
↓
ループ条件偽、終了
せっかくソースを見ながら結果を確かめる事が出来る
デバッガーが付いた開発環境を使っているのですから
デバッガーをどんどん活用しましょう。
これが無い環境ではひたすら画面に途中経過を表示して
状況確認するしかないわけですから。
デバッガーを使えば、動かしながら変数の値を確認するという事も
簡単に出来ます。デバッガーの使い方を勉強される事をお勧めします。
質問確認
breakの追加前と、追加後の2段階がありますが
●追加前
>でも、実際にはexitと打ってもwhile loopから抜けません
こっちには回数が書かれていませんが、回数に関係なく抜けないのですか?
それとも追加後と同じで2回打てばぬけますか?
●追加後
>としても、二回exitを打たねば終了しません。
追加前は「抜けない」とあり、こっちの追加後は「終了」になっていますが
この終了は、追加前と並列に考えて、「抜けない」の言い換えでしょうか?
それとも、こっちの場合はアプリケーションの終了のことでしょうか?
また、追加後についてですが
std::cin >> str;
std::cin >> ch;
strとchの2回ありますが、二回打たないといけないのはこのことではありませんか?
皆様方ありがとうございます。
Blue様
全くご指摘の通りです。どうかしていました。
PATIO様
debuggerでbreak pointを設けても分かりませんでした、本当に馬鹿な自分です。
rin様
全くご指摘の通りで。最後のcin >> chでアプリケーション終了をカウントしていまし
た。すみませんでした。
皆様方、これに懲りず今後ともご指導宜しくお願いします