获得错误的函数消息

  • 本文关键字:函数 消息 错误 c++
  • 更新时间 :
  • 英文 :


>我在运行函数时遇到问题。该程序应该查看一组 3 个数字是否有效,仅在它在 200 到 800 之间。即使认为 -5 之类的值无效,结果仍然说它有效。有人可以帮助我确定问题吗?

您遇到了未定义的行为,因为您没有初始化布尔变量。

bool ansa, ansb, ansc, overall;

在 C 和 C++ 中,当表达式的计算结果为 0 时,它被认为是"假",否则它被认为是真的。

if (!0)
    std::cout << "!0 is true" << std::endl;
if (3)
    std::cout << "3 is true" << std::endl;
if (255)
    std::cout << "255 is true" << std::endl;

正在发生的事情是程序正在为堆栈上的ansaansbansc分配空间。如果这些位置碰巧已被程序在以前的函数调用中使用,则它们可能具有非零值,导致它们的计算结果为"true"。

默认情况下,您需要将这些设置为 false:

bool ansa = false, ansb = false, ansc = false, overall = false;
或者,当您发现它们的条件

不满足时,您需要为它们分配"false"值(测试的"else"情况):

bool isitavalidgroup (int a, int b, int c)
{
    bool ansa, ansb, ansc, overall;
    if ((a <= 800) && (a >= 200)){
        ansa = true;
    }
    else {
        cout << a << " is invalid" << endl;
        ansa = false;
    }
    if ((b <= 800) && (b >= 200)) {
        ansb = true;
    }
    else {
        cout << b << " is invalid" << endl;
        ansb = false;
    }
    if ((c <= 800) && (c >= 200))  {
        ansc = true;
    }
    else {
        cout << c << " is invalid" << endl;
        ansc = false;
    }
    if (ansa && ansb && ansc == true){
        overall = true;
    }
    else {
        overall = false;
    }
    return overall;
}  

此外,您可以重写代码以使用"短路"逻辑 - 也就是说,要使组有效,所有三个变量都必须有效。如果任何一个无效,您将立即知道该组不再有效。因此,当您找到第一个错误条件时,返回 false,而不是继续测试所有错误条件。

if (a && b && c)
"&

&"的意思是"AND ALSO",所以如果a是假的,条件就不可能为真,所以没有理由继续弄清楚bc是否也为真。

bool isItAValidGroup(int a, int b, int c)
{
    if (a < 200 || a > 800) {
        cout << a << " is invalid" << endl;
        return false;
    }
    if (b < 200 || b > 800) {
        cout << b << " is invalid" << endl;
        return false;
    }
    if (c < 200 || c > 800) {
        cout << c << " is invalid" << endl;
        return false;
    }
    // everything passed.
    return true;
}

您尚未初始化 ansa、ansb 或 ansc。 您在条件语句中将它们显式设置为 true,但从不将它们设置为 false。 因此,它们的值没有定义,只要它们没有碰巧初始化为零,它们就会被视为 true。

最新更新