C ++ while循环不退出上假条件(闭合)(c++ while loop doesn't

2019-10-17 08:29发布

我在我的代码中的一个问题导致运行时错误。 要调试,我扔在一些语句COUT找到的最后位置的代码执行正确的代码。 基于输出,它看起来像while语句休息时,当条件计算为假,但我不能看到这是可能的。 下面的代码:

是的声明:

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循环退出之前的计划失败。 这怎么可能? 是否有事可做与堆叠的工作方式?

Answer 1:

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

这个问题实际上是最后COUT后会发生什么。 之后的声明, if(opStack.top()[1] == 'L'){ ,试图从空栈让高层项目,导致运行失败。

但是,这怎么可能,因为我们从来没有看到在输出中“做出来while循环”? 这是因为在过去COUT方法还没有刷新到程序崩溃前的输出。 我加了<<endl最后清点,并做了把戏。 “做出来,而循环的”被显示,我是能够确定在程序中的实际问题。 (通过将最后的if-else语句中解决了这个问题if(opStack.empty()==false){//second if-else set}

由于@interjay用于指出COUT没有得到刷新在我原来的,但格式混乱的问题: while循环条件不玩stack.empty漂亮的C ++() )



文章来源: c++ while loop doesn't exit on false condition [closed]