Sle*_*der 1 c++ integer ternary-operator
我的目标:输入两个整数,并对所有从小数到大数的整数求和。
#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;
}
Run Code Online (Sandbox Code Playgroud)
我要测试三元条件运算符,而不是使用if语句。
当v1小于或等于v2时,例如
Enter two integers:
1
5
The sum is 15
Run Code Online (Sandbox Code Playgroud)
结果效果很好。
但是当v1> v2时,结果是错误的。
Enter two integers:
5
1
The sum is 0
Run Code Online (Sandbox Code Playgroud)
我不知道为什么。有人可以解释一下吗?
您需要在逗号运算符的每一侧交换术语,因为big将在列表中为其分配最后一个术语。您还需要添加括号以使其正确评估:
big = (v1 > v2) ? (small = v2, v1) : (small = v1, v2);
Run Code Online (Sandbox Code Playgroud)
请参阅此处的说明:
在逗号表达式中
E1, E2,将对表达式E1求值,并丢弃其结果。逗号表达式的结果的类型,值和值类别恰好是第二个操作数的类型,值和值类别,E2
另外,如果您希望它简短易读,则可以考虑以下方法:
std::cin >> big >> small;
if (small > big)
std::swap(big, small);
Run Code Online (Sandbox Code Playgroud)