ループを抜けません

[戻る]
Baby Chicken [HomePage] 2009/05/25(月) 08:11:21
相変わらず初歩的質問で申し訳ありません。
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"を打たねば終了しません。何か根本的間違いをしていて、それに気
付かない自分が怖いので、恥ずかしいですがご教授お願いします。

Blue 2009/05/25(月) 08:42:49
デバッグモードで追ってみれば一発なんですが。。。

>std::cin >> str;
をif文の前に持っていくだけでは?

ループ条件真、継続
↓
if文偽、flag = true
↓
std::cin、exit入力
↓
ループ条件真、継続
↓
if文真、flag = false
↓
std::cin、何か入力
↓
ループ条件偽、終了

PATIO 2009/05/25(月) 11:04:22
せっかくソースを見ながら結果を確かめる事が出来る
デバッガーが付いた開発環境を使っているのですから
デバッガーをどんどん活用しましょう。
これが無い環境ではひたすら画面に途中経過を表示して
状況確認するしかないわけですから。

デバッガーを使えば、動かしながら変数の値を確認するという事も
簡単に出来ます。デバッガーの使い方を勉強される事をお勧めします。

rin 2009/05/25(月) 12:37:33
質問確認

breakの追加前と、追加後の2段階がありますが

●追加前
>でも、実際には"exit"と打ってもwhile loopから抜けません
こっちには回数が書かれていませんが、回数に関係なく抜けないのですか?
それとも追加後と同じで2回打てばぬけますか?


●追加後
>としても、二回"exit"を打たねば終了しません。
追加前は「抜けない」とあり、こっちの追加後は「終了」になっていますが
この終了は、追加前と並列に考えて、「抜けない」の言い換えでしょうか?
それとも、こっちの場合はアプリケーションの終了のことでしょうか?

また、追加後についてですが
  std::cin >> str;
 std::cin >> ch;
strとchの2回ありますが、二回打たないといけないのはこのことではありませんか?

Baby Chicken 2009/05/25(月) 17:50:58
[[解決]]
皆様方ありがとうございます。
Blue様
全くご指摘の通りです。どうかしていました。

PATIO様
debuggerでbreak pointを設けても分かりませんでした、本当に馬鹿な自分です。

rin様
全くご指摘の通りで。最後のcin >> chでアプリケーション終了をカウントしていまし
た。すみませんでした。

皆様方、これに懲りず今後ともご指導宜しくお願いします

古いスレッドには追加発言できません。