C++ while 循环不会在错误条件下退出

c++ while loop doesn't exit on false condition

本文关键字:错误 错误条件 条件下 退出 while 循环 C++      更新时间:2023-10-16

我在代码中遇到问题,导致运行时间错误。要调试我在一些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循环退出之前失败。怎么可能?它与堆叠的工作方式有关吗?

while循环确实在错误条件下退出。我没有正确调试,这使我专注于代码的错误部分。

问题实际上是最后一个代表后发生的事情。此后的语句if(opStack.top()[1] == 'L'){试图从空堆栈中获取顶部项目,并导致运行失败。

但是,这是怎么可能的,因为我们从未在输出中看到"脱离时循环"?这是因为在程序崩溃之前,最后一个cout永远不会冲向输出。我将<<endl添加到了最后一个代表中,这就是解决问题。显示了"在循环时脱颖而出",我能够查明程序中的真正问题。(通过将最后的IF-ELSE语句放入if(opStack.empty()==false){//second if-else set}中解决)

感谢@interjay指出的是,Cout在我的原始格式但格式不佳的问题中并没有被冲洗:C 时循环条件与stack.empt..empty())