获得错误的函数消息
Getting wrong message for function
>我在运行函数时遇到问题。该程序应该查看一组 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;
正在发生的事情是程序正在为堆栈上的ansa
、ansb
和ansc
分配空间。如果这些位置碰巧已被程序在以前的函数调用中使用,则它们可能具有非零值,导致它们的计算结果为"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
是假的,条件就不可能为真,所以没有理由继续弄清楚b
和c
是否也为真。
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。
相关文章:
- 从函数(不抛出函数)返回异常以进行消息格式化?
- 我在主函数的左括号上不断收到错误,消息为obj\Debug\main.o||在函数"ZN11linked_listC1Ev"中:|
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 修改链表主函数代码,用户将在其中输入节点的索引和数据以及正确的消息
- 请参阅在 Visual Studio 2019 中捕获 std::exception 时对函数模板实例化消息的引用
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 如何编写一个接受如下断言消息的自定义断言函数:assert(false) << "assertio
- 重构MFC消息映射以包括完全限定的成员函数指针
- 从函数打印 CLI 帮助消息后,我应该如何干净地退出 C++ 程序?
- 可视C++消息框中函数的显示地址
- C++ 乘法定义的构造函数错误消息似乎错误
- 带有指向成员函数的指针的模板 =VC++ 2017 和 gcc 5.1 的>不同的错误消息
- 哪些消息可以传递给低级鼠标挂钩回调函数
- 错误消息:使用复制构造函数和重载赋值运算符
- 如何使用消息框函数显示 BSTR 值
- 无法理解编译器在复制构造函数上引发的错误消息
- 使用分位数函数提升断言失败的消息
- MFC 消息映射中的函数地址
- 为什么调用单例类 Qt 消息处理程序成员函数会出现错误:缺少参数列表
- 获得错误的函数消息