簡體   English   中英

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將分配到列表中的最后一個。 您還需要添加括號以使其正確評估:

big = (v1 > v2) ? (small = v2, v1) : (small = v1, v2);

請參閱此處的解釋:

在逗號表達式E1, E2 ,表達式E1被求值,其結果被丟棄 [...] 逗號表達式結果的類型、值和值類別正是該表達式的類型、值和值類別第二個操作數, E2


此外,如果您希望它簡短易讀,您可以考慮這樣做:

std::cin >> big >> small;
if (small > big)
    std::swap(big, small);
big = v1 > v2 ? v1, small = v2 : v2, small = v1;

這不符合您的預期。 當使用逗號操作,以分離一數量的表達式,產生的表達得到最后的表達式的值。 所以在你的情況下,如果v1 > v2big被分配的值:

 v1, small = v2

這是small = v2的值,它變成了v2而不是你想要的v1 因此,當v1 > v2時,您最終會為兩個數字分配相同的值!

您可以使用單獨的語句:

big = v1 > v2 ? v1 : v2;
small = v1 < v2 ? v1 : v2;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM