【问题标题】:if statement not working right?if 语句不起作用?
【发布时间】:2012-02-07 04:26:55
【问题描述】:

我用调试器看了又看,似乎无法弄清楚为什么 IF 语句总是打印消息。

IF 语句检查是否 yesno != 'Y' ||(or) 'N' 但无论我输入 y 或 Y 或 n N 或 H B 它都会显示...。我不知道该采取什么行动了!我似乎找不到哪里出错了?

if(yesno != 'Y' || 'N') { ...

谢谢大家。

【问题讨论】:

  • pastebin 链接似乎不起作用。由于您的问题似乎围绕着一个 if 语句,为什么不将其包含在问题中。

标签: c++ if-statement


【解决方案1】:

|| 并不完全符合您的想法。正确的做法是:

if (yesno != 'Y' && yesno != 'N') { ...

这会独立评估&& 的每一边,如果两边 都为真,则结果为真。

注意

if (yesno != 'Y' || yesno != 'N') { ...

总是为真,因为任何给定的字符都是要么而不是Y它不是N。这可能不是你想要的。

【讨论】:

  • 但是为什么没有按预期工作? +1 指出重言式。我认为使用 D.M. 更容易看到。如:!(yesno == 'Y' && yesno == 'N').
  • if (yesno != 'Y' && yesno != 'N') 工作得很好....谢谢,我有一个大脑放屁....因为正如之前有人所说,我使用它在第 44 行正确...谢谢!
【解决方案2】:
if(yesno != 'Y' || 'N')

应该是:

if(yesno != 'Y' && yesno != 'N')

您将它们链接起来,这是不正确的。我很确定您知道您不应该这样做,这是一个错字,因为您在第 44 行上正确使用了 &&

【讨论】:

  • @Als - 即使它是一种改进,它仍然总是评估为真。不清楚你的意思是他也应该在这里使用&&
【解决方案3】:

将条件yesno != 'Y' || 'N' 分开。它有两个子句:

  1. yesno != 'Y'。这可能是您想要的比较;它会检查字符 yesno 是否不等于值 'Y'
  2. 'N'。该子句仅计算为值'N'。作为布尔值,'N' 不为零,被认为是“真”。

所以你有“(东西)||(总是正确的)”。这里的“stuff”是yesno != 'Y',“always true”是'N'。结果永远为真。

【讨论】:

    【解决方案4】:

    你不能 OR 一个表达式 (yesno!='Y') 和一个语句 ("N"),它也是一个表达式。它只有两个或多个可以使用 || 组合的表达式和 && 以获得所需的输出。

    if(yesno!="Y"||"N")
    

    其实是

    if(yesno!="Y" || TRUE)
    

    这总是正确的,因为:

    Exp||TRUE=TRUE 
    

    不管表达方式。

    use if(yesno!="Y"|| yesno!="N")      // and in this case its && and not || i think
    

    【讨论】:

      【解决方案5】:

      你需要放

      如果 (yesno != 'Y' || yesno != 'N')

      你总是需要把完整的表达式放两次。

      【讨论】:

      • 但它仍然总是计算为真,因为变量不能同时是 Y 和 N。