【问题标题】:C++ using char in an if statementC++ 在 if 语句中使用 char
【发布时间】:2014-10-15 19:00:00
【问题描述】:

我正在构建一个标准的四功能计算器,但遇到了一个令人困惑的错误。

char Engine::AskUser(){
    char type;
    std::cout << "'a'dd, 'm'ulitply, 's'ubract, or 'd'ivide ?\n";
    std::cin >> type;
    CheckUser(type);
    return type;
}

void Engine::CheckUser(char uType){
    if(uType != 'a' || uType != 's' || uType != 'm' || uType != 'd'){
        std::cout << "Type 'a', 'm', 's', or 'd'\n";
        AskUser();
    }
    else
        return;
}

发生的情况是,即使我输入 a、s、m 或 d,if 语句仍然会像这些条件为真一样进行迭代,显然情况并非如此。我不明白。 uType 是否没有携带来自 AskUser() 或类似的类型的值?

【问题讨论】:

    标签: c++ if-statement char


    【解决方案1】:
    if(uType != 'a' || uType != 's' || uType != 'm' || uType != 'd')
    

    char 要么不等于'a',要么等于'a',在这种情况下它不等于's',所以这个条件总是成立的。

    应该是逻辑与:

    if(uType != 'a' && uType != 's' && uType != 'm' && uType != 'd')
    

    【讨论】:

      【解决方案2】:

      您的 if 条件正在执行以下检查:

      如果值不等于-- 要么 如果值不等于 s -- 要么 如果值不等于 m -- 要么 如果值不等于 d --

      无论 char 变量 uType 是什么,它始终不会是前 4 个变量中的至少 3 个,因此 if 条件将始终导致 TRUE 值。

      已编辑:我相信您想要做的是以下内容:

      if ( (uType == 'a') || (uType == 's') || ......)
      {
          return;
      }
      else
      {
         ...//The code you previously had if it were true
      }
      

      在这种情况下,只要 uType 是 4 个值中的 1 个,您就会返回,否则您将实现您的代码。

      【讨论】:

        【解决方案3】:

        改变这一行 -

        if(uType != 'a' || uType != 's' || uType != 'm' || uType != 'd')
        

        到这里——

        if(uType != 'a' && uType != 's' && uType != 'm' && uType != 'd')
        

        一定会成功的。

        【讨论】:

          猜你喜欢
          • 2013-07-12
          • 2015-07-24
          • 1970-01-01
          • 1970-01-01
          • 2016-07-14
          • 2014-01-02
          • 1970-01-01
          • 2018-02-09
          • 2013-10-07
          相关资源
          最近更新 更多