1

コードに問題があり、実行時エラーが発生します。いくつかのcoutステートメントでスローしたコードをデバッグして、コードが正しく実行される最後の場所を見つけます。出力に基づくと、while条件がfalseと評価されると、whileステートメントが壊れているように見えますが、それがどのように可能であるかはわかりません。コードは次のとおりです。

var宣言:

queue<string> newOrder;
stack< vector<char> > opStack;
char symbol;

スタックとキューにデータを入力するようなことが起こり、次のコードに到達します。

while(opStack.empty()==false){
    if(opStack.top()[1] != 'L'){
        cout<<"is stack empty?:"<<opStack.empty()<<endl;
        symbol = opStack.top()[0];
        newOrder.push(symbol);
        opStack.pop();
        cout<<"popped stack;"<<endl;
        cout<<"is stack empty?:"<<opStack.empty()<<endl;
    }
    else{
        break;
    }
}
cout<<"made it out of while loop";

if(opStack.top()[1] == 'L'){    
   opStack.pop();
}
else{
   errorEncountered = true;
}

これは出力です:

is stack empty?:0
popped stack;
is stack empty?:1
RUN FAILED (exit value 1, total time: 1s)

したがって、出力に基づいて、スタックはループの終わりで空になります。これにより、whileループ条件がfalseになりますが、プログラムはwhileループが終了する前に失敗します。どうしてそれが可能でしょうか?スタックの動作方法と関係がありますか?

4

1 に答える 1

3

whileループは、false条件で終了します。私は適切にデバッグしていなかったので、コードの間違った部分に集中することになりました。

問題は、実際には最後のカウトの後に何が起こるかです。その後のステートメントif(opStack.top()[1] == 'L'){は、空のスタックから最上位のアイテムを取得しようとし、実行を失敗させます。

しかし、出力に「whileループから外れた」とは表示されないので、どうすればそれが可能になるのでしょうか。これは、プログラムがクラッシュする前に最後のcoutが出力にフラッシュされないためです。私は最後のカウトに追加<<endlしました、そしてそれはトリックをしました。「whileループから抜け出しました」と表示され、プログラムの本当の問題を特定することができました。(最後のif-elseステートメントを中に入れることで解決しましたif(opStack.empty()==false){//second if-else set}

@interjayに感謝します。私の元の質問では、coutがフラッシュされていませんでしたが、フォーマットが不十分です。c++ whileループ条件がstack.empty()でうまく機能していません

于 2012-11-01T21:05:06.207 に答える