2017-09-02 175 views
-1

我有一個看起來像這樣的方法:C++?運營商,運營商繼續在for循環

bool Perfect(int num) { 
    int sum = 0; 
    for (int i = 1; i < num; i++) 
    { 
     num%i == 0 ? sum += i : continue; 
    } 
    return sum == num ? true : false; 
} 

我想在這裏結合?運營商,運營商繼續...

所以邏輯上,如果這裏的說法是錯誤的在這條線:

num%i == 0 ? sum += i : continue; 

我只跳過迭代或者什麼也不做?

如果我不喜歡這樣的編譯器會報告錯誤,如:

expected an expression 

而如果是這樣的:

num%i == 0 ? sum += i 

它說:

Expected a ':' 

有什麼繼續使用的方式?運營商或只是簡單地避免假情況?

+9

不要在這種情況下強制使用三元組;它沒有任何意義。只需使用if/else。另外,'return sum == num? true:false;'應該寫成'return sum == num'; – Carcigenicate

+0

@Carcigenicate我只是探索C++的可能性,這就是爲什麼我很好奇,如果有一種解決方案,使用三元運算符與這些種情況:) – User987

+4

Ternarys是用來有條件地返回一個值。 「繼續」不會評估任何有用的東西。實驗是好的,但是認識正確工作的正確工具也是如此。 – Carcigenicate

回答

3
bool Perfect(int num) { 
    int sum = 0; 
    for (int i = 1; i < num; i++) 
    { 
     if(num % i == 0) 
     sum += i; 
    } 
    return sum == num; 
} 

使用if聲明。由於您在sum += i之後沒有其他聲明,因此不需要continue

+0

只需使用'return sum == num;' –

2

C++和C兼得語句表達式(注意分配或函數調用是一個表達式,並且表達式語句)。它們是不同的句法(和語義)的東西。

你可以有編碼(但是這是怪異的風格,換算爲一個?:條件表達式聲明)您for循環內:

(num%i == 0) ? (sum += i) : 0; 

(當num%i不爲零,計算結果爲0這沒有明顯的副作用; BTW最後出現0可能是1234或任何常數整數表達式)

某些編程語言(特別是Scheme ,閱讀SICP)只有表達式(和沒有語句)。

三元組?: operator適用於表達式並給出一個表達式(所以不能用於語句)。

條件語句使用if關鍵字。在你的情況下,它更具可讀性(因爲你僅僅爲了副作用而使用sum += i),並且這裏的if聲明更容易理解。

2

您不能以這種方式使用三元運算符。您通常會使用它來根據表達式爲true或false將值分配給變量。例如。

int j, i, 

j = (i == 2) ? 5: 10; 

如果i等於2則j給出的5否則該值,如果i不等於2,則j的給定的10的值。