条件不工作,总是返回第一种情况
Conditional not working, returns first case always
结果打印出'c' 3次,有人知道为什么它总是满足第一个条件吗?
#include <iostream>
using namespace std;
char x(char y)
{
if (y == 'a' || 'b')
{
return 'c';
}
else if (y == 'c' || 'd')
{
return 'e';
}
else
{
return 'g';
}
}
int main()
{
cout << x('a') << endl;
cout << x('c') << endl;
cout << x('p') << endl;
return 0;
}
您需要的格式为
if (y == 'a' || y == 'b')
这是因为在这个表达式
(y == 'a' || 'b')
计算y == 'a'
和'b'
的或,由于'b'
不为零,计算结果为true
,因此整个表达式计算结果为true
。
(y == 'a' || true)
这一行:
if (y == 'a' || 'b')
等价于:
if ((y == 'a') || ('b'))
这是因为==
运算符的优先级高于||
运算符。
由于'b'
非零,它的值总是为真,因此(y == 'a' || 'b')
的值总是为真。
你需要这样写:
if (y == 'a' || y == 'b')
当然,即使优先级是相反的,
if (y == ('a' || 'b'))
也不是你想要的!
请查看操作符优先级(优先级):http://en.cppreference.com/w/cpp/language/operator_precedence
在你的例子中,条件表达式是:
(y == 'a' || 'b')
因此首先计算"y == 'a'"部分,根据"y"的值可能为真或假。我们把"y=='a'"的值称为"t"。然后表达式被求值为"t || 'b'"在这种情况下,'b'实际上是字符'b'的ASCII码值(98),它肯定大于0,因此布尔表达式的结果始终为真。
为了消除由操作符优先级引起的任何歧义,我认为在求值中使用括号显式表示优先级是一个好习惯。在你的情况下,正如之前的帖子所建议的,它应该是:
if ((y=='a') || (y=='b'))
相关文章:
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 在C++中,有没有一种方法可以让我在不传递参数的情况下拥有一个函数
- 有没有一种方法可以在不设置精度的情况下设置小数位数
- 有没有一种方法可以在不复制数据的情况下从string_view创建字符串流
- 是否有一种设计模式或面向对象的基本原则来处理这种共享资源的情况?
- free():仅在一种情况下指针无效
- C++ 在一种特定情况下替代无效*
- 有没有一种很好的方法来实现具有默认失败情况的条件类型?
- 在我的情况下,多重继承是一种好的设计模式吗?
- 是否有另一种方法可以在不使用宏定义的情况下进行此操作
- 一种在没有 root 的情况下加载共享库的更简单方法
- 在C 中,有一种惯用方法来防止运行一系列动作的情况导致该集合被突变
- C++是否提供了一种在没有范围解析运算符的情况下访问类中的类的方法?
- 为什么在一种情况下,我会收到带有字符串文字的已弃用转换警告,而在另一种情况下却没有?
- 我如何仅在一种情况下或某些情况下专业攻击效果
- 有没有一种方法可以在不使用std ::移动的情况下初始化类构建类的类
- 空格很重要的另一种情况(也许?
- 一种在没有光线投射的情况下在 3D 中使用寻路和多目标的方法
- 有没有一种方法可以在没有QApplication::exec()的情况下使用Qt