虽然循环不起作用

时间:2018-05-10 10:59:39

标签: c while-loop syntax-error

while(!s.isEmpty() && prec(c) <= prec(s.peek())) {}

我程序中的上述语句正确执行

但是下面的语句给了我emptyStackError

while(prec(c) <= prec(s.peek()) && !s.isEmpty()) {}

我所做的更改只是在while语句中给出了错误? 为什么两种情况下的工作都不同?

1 个答案:

答案 0 :(得分:0)

while(!s.isEmpty() && prec(c) <= prec(s.peek()))

•在这个while循环中,它会检查你的堆栈是否为空,只有当它不为空时它才会prec(c) <= prec(s.peek())

while(prec(c) <= prec(s.peek()) && !s.isEmpty())

•在此while循环中,它将首先比较prec(c) <= prec(s.peek()),并且仅当为true时,它将检查堆栈是否为空。

第二个循环会给出错误,因为如果堆栈中没有任何内容,它仍会尝试比较prec(c) <= prec(s.peek()),然后才意识到堆栈是空的。

问问自己,如果您的筹码是空的,那么它与prec(c) <= prec(s.peek())的比较是什么?

所以只是为了弄清楚你的理解=&gt; 当prec(c)&lt; = prec(s.peek())时,你的循环终止......但是当你的堆栈为空时它也会终止。第二个while循环比较其中一个值恰好来自堆栈的值。如果你的堆栈是空的,它应该比较什么?