c++ - C++ 中的三元条件运算符问题

标签 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;
}

我想测试三元条件运算符,而不是使用 if 语句。

当v1小于等于v2时,如

Enter two integers: 
1
5
The sum is 15

结果很好。

但是当v1 > v2时,结果是错误的。

Enter two integers: 
5
1
The sum is 0

我想不出为什么。 有人可以解释一下吗?

最佳答案

您需要交换逗号运算符两边的术语,因为 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);

关于c++ - C++ 中的三元条件运算符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57753457/

相关文章:

c++ - Input String 应该是 Integer - C++

c++ - if-else 和三元运算符的不同行为

c++ - 在QNX中,如何管理服务器和客户端之间的IPC连接?

c++ - 我的代码没有编译,谁能帮我弄清楚我做错了什么?

python - Python 中的固定宽度整数类型(例如 uint32)

javascript三元运算符来增加或减少值

c++ - 三元运算的结果(类型)是什么?

c++ - 空结构或匿名结构作为标签

c++ - boost 功能并绑定(bind)外部符号

c - 在数组中存储整数(32 位)(哪种类型?)C 编程