C++ 中的三元条件运算符问题
ternary condition operator issue in C++
我的目标:输入两个整数,将所有整数从小数到大数相加
#include <iostream>
int main() {
int v1, v2;
std::cout << "Enter two integers: " << std::endl;
std::cin >> v1 >> v2;
int big, small;
big = v1 > v2 ? v1, small = v2 : v2, small = v1;
int sum = 0;
for (int i = small; i <= big; i++)
sum += i;
std::cout << "The sum is " << sum << std::endl;
getchar();
getchar();
return 0;
}
我想测试三元条件运算符,而不是使用 if 语句。
当v1小于等于v2时,如
Enter two integers:
1
5
The sum is 15
结果很好。
但是当v1 > v2时,结果是错误的。
Enter two integers:
5
1
The sum is 0
我想不出为什么。
有人可以解释一下吗?
big = v1 > v2 ? v1, small = v2 : v2, small = v1;
这不符合您的预期。
当使用逗号运算符 ,
分隔多个表达式时,生成的表达式将获取最后一个表达式的值。所以在你的例子中,如果 v1 > v2
,big
被赋值为:
v1, small = v2
这是 small = v2
的值,它变成了 v2
而不是你想要的 v1
。因此,当 v1 > v2
!
时,您最终会为两个数字分配相同的值
您可以使用单独的语句:
big = v1 > v2 ? v1 : v2;
small = v1 < v2 ? v1 : v2;
您需要交换逗号运算符两边的术语,因为 big
将被分配到列表中的最后一个。您还需要添加括号以使其正确计算:
big = (v1 > v2) ? (small = v2, v1) : (small = v1, v2);
查看说明here:
In a comma expression E1, E2
, the expression E1
is evaluated, its
result is discarded [...] The type, value, and value category of the result of the comma expression are exactly the type, value, and value category of the second operand, E2
此外,如果您希望它简短易读,您可以考虑这样做:
std::cin >> big >> small;
if (small > big)
std::swap(big, small);
我的目标:输入两个整数,将所有整数从小数到大数相加
#include <iostream>
int main() {
int v1, v2;
std::cout << "Enter two integers: " << std::endl;
std::cin >> v1 >> v2;
int big, small;
big = v1 > v2 ? v1, small = v2 : v2, small = v1;
int sum = 0;
for (int i = small; i <= big; i++)
sum += i;
std::cout << "The sum is " << sum << std::endl;
getchar();
getchar();
return 0;
}
我想测试三元条件运算符,而不是使用 if 语句。
当v1小于等于v2时,如
Enter two integers:
1
5
The sum is 15
结果很好。
但是当v1 > v2时,结果是错误的。
Enter two integers:
5
1
The sum is 0
我想不出为什么。 有人可以解释一下吗?
big = v1 > v2 ? v1, small = v2 : v2, small = v1;
这不符合您的预期。
当使用逗号运算符 ,
分隔多个表达式时,生成的表达式将获取最后一个表达式的值。所以在你的例子中,如果 v1 > v2
,big
被赋值为:
v1, small = v2
这是 small = v2
的值,它变成了 v2
而不是你想要的 v1
。因此,当 v1 > v2
!
您可以使用单独的语句:
big = v1 > v2 ? v1 : v2;
small = v1 < v2 ? v1 : v2;
您需要交换逗号运算符两边的术语,因为 big
将被分配到列表中的最后一个。您还需要添加括号以使其正确计算:
big = (v1 > v2) ? (small = v2, v1) : (small = v1, v2);
查看说明here:
In a comma expression
E1, E2
, the expressionE1
is evaluated, its result is discarded [...] The type, value, and value category of the result of the comma expression are exactly the type, value, and value category of the second operand,E2
此外,如果您希望它简短易读,您可以考虑这样做:
std::cin >> big >> small;
if (small > big)
std::swap(big, small);