如何解释这个if语句?

时间:2016-12-17 03:53:55

标签: c++ if-statement logic

我正在尝试创建一个简单的'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;
}

2 个答案:

答案 0 :(得分:1)

C ++中的逗号运算符意味着完全不同的东西 - 它将两个表达式分开,忘记第一个表达式的结果并返回第二个表达式的值。

因此,技术上的第一个陈述可以缩短为:

if (100) {
    ...

始终为true(C / C ++中的任何非零表达式都计算为true)。

为避免这么多比较,您实际上可以使用%运算符。

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

答案 1 :(得分: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;
}