2016-12-17 91 views
-4

我想創建一個簡單的'fizzbuzz'程序,每次打印3的倍數時,'fizz'打印在它旁邊,每打印5的倍數,'buzz'打印在它旁邊。 然而,在這個程序中會發生什麼呢?第一個if語句每次都是正確的,輸出是每個數字都有'Buzz!'。在它旁邊。這是爲什麼發生?爲了正確編程,我需要實現什麼?如何聲明,我該如何補救?

for(int index = 1; index <= 100; ++index) { 
    cout << index << endl; 
    if (index == 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100) 
     cout << " Buzz!" << endl; 
    else if(index == 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99) 
     cout << " Fizz!" << endl; 
} 
+0

1.這些'如果'不做他們認爲他們做的事。 2.檢查一個數是否可​​以被5整除的方法是將除法的餘數除以5,即'數字%5 == 0' – dasblinkenlight

回答

1

C++中的逗號運算符意味着完全不同的東西 - 它將兩個表達式分開,忘記第一個表達式的結果並返回第二個表達式的值。

因此技術上的第一個語句可以縮短爲:

if (100) { 
    ... 

這始終是真的(在C/C++評估爲真任何非零表達)。

爲了避免這麼多的比較,你可以使用%運算符。

if (i%5 == 0) { 
    cout << " Buzz!" << endl; 
} 
else if (i%3 == 0) { 
    cout << " Fizz!" << endl; 
} 
+0

非常感謝大家。我將從現在開始考慮模數,並使用您提供的信息修正此代碼。 – CosmicBatz

0

這可以使用模數(%)很容易地清理。

for(int index = 1; index <= 100; ++index) { 
    cout << index << endl; 
    if (index % 5 == 0) 
     cout << " Buzz!" << endl; 
    else if(index % 3 == 0) 
     cout << " Fizz!" << endl; 
}