【问题标题】:How to write a correct 'bool' function?如何编写正确的“布尔”函数?
【发布时间】:2019-08-09 07:04:32
【问题描述】:

我的代码有问题。我在int main()上面写了一个bool函数:

bool currency_(const char c)
{
    while (c==' ')
    {
        if (c==('p', 't', 'e', 'd'))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

我希望程序能够工作,但在编译时却显示“控制到达无效函数的末尾”。

【问题讨论】:

  • 在这种情况下你的while 是什么?
  • "if (c==('p', 't', 'e', 'd'))" 从来没有在 C++ 中,这不是 python...
  • c == 'p' || c == 't' || ... 任何good book,课程或教程都应该教过你。
  • 您尝试的实现并没有说明您要实现的目标,因此您可能需要稍微解释一下。
  • 即和if (c == ' ') return c == 'd';一样

标签: c++ search char


【解决方案1】:

你的函数没有意义。

如果c 是一个空格字符,您的if 语句(如果您写对了,但您没有写对)将始终评估为假。

如果c 不是空格字符,您的函数将以未定义的返回值退出。

而你的while 是无用的,因为该函数永远不会修改c

你可能打算写这样的东西:

bool currency_(const char c)
{
    if (c =='p' || c == 't' || c == 'e' || c == 'd')
    {
        return true;
    }
    else
    {
        return false;
    }
}

或者干脆

bool currency_(const char c)
{
    return (c =='p' || c == 't' || c == 'e' || c == 'd');
}

【讨论】:

    【解决方案2】:
    while (c==' ')
        {
            if (c==('p', 't', 'e', 'd'))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    

    如果c != ' ',你永远不会进入你的while循环体,并到达非空函数的结尾,不返回任何东西,调用未定义的行为。

    另外,if (c==('p', 't', 'e', 'd')) 并没有按照你的想法去做。 您应该像这样链接|| 运算符

    if(c == 'p' || c == 't' || c == 'e' || c == 'd'){...}
    

    或者,您可以使用std::arraystd::find

    constexpr std::array<char,4> characters{'p', 't', 'e', 'd'};
    if(std::find(characters.cbegin(), characters.cend(), c) != characters.cend()) {...}
    

    【讨论】:

      【解决方案3】:

      这样

      if (c == 'p' || c == 't' || c== 'e' || c == 'd')
      

      编造代码并希望它是正确的 C++ 不是一个好主意。它很少起作用。

      但是即使有了这个更正,关于控制到达非空函数末尾的另一个问题仍然存在。如果c 不等于' ',您希望您的代码返回什么?

      然后你有另一个问题是如果c 等于' ' 那么它不能等于'p''t''e''d'。所以你的代码也有一些逻辑问题。

      【讨论】:

        【解决方案4】:

        将这些字符放入向量中并尝试在其中找到 c:

        std::vector<char> options{'p', 't', 'e', 'd'};
        bool currency_(const char c)
        {
        
            if (std::find(options.begin(), options.end(), c) != options.end())
            {
                return true;
            }
            else
            {
                return false;
            }
        
        }
        

        或者更好的是直接返回std::find的结果:

        bool currency_(const char c)
        {
            return (std::find(options.begin(), options.end(), c) != options.end())
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-13
          • 2019-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多