C++ while 循环不会在错误条件下退出
c++ while loop doesn't exit on false condition
我在代码中遇到问题,导致运行时间错误。要调试我在一些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())
相关文章:
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 如何摆脱C ++中的分段错误错误?
- Clang 8 带有静态 constexpr 和数组的链接器错误 - 错误是什么以及如何解决它?
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 如何解决分段错误错误C++
- 作为参数模板的模板类:MSVC 错误 - 错误 C2977:模板参数过多 (C++98)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- 卷曲给出分段错误错误
- 错误错误 C2872:"布尔值":kinect.h 的不明确符号
- C++打印模板容器错误(错误:"运算符<<"的不明确重载)理解?
- 结构的分割错误错误
- 为什么此代码返回分段错误错误?
- 错误错误:无法编译内置功能
- 分段错误错误C++
- C++ 1Z 错误:错误:演绎指南中声明中的显式限定
- 使用对数据类型的向量的哈希表中的分段错误错误
- 视觉C++错误 C2451 条件字符串是非法的
- Valgrind不会报告现有的泄漏/错误的条件
- 验证代码中的错误,条件总是正确的
- 哪些Boost.Asio调用返回哪些Boost错误代码/条件