[英]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 > v2
, big
被分配的值:
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.