如何进行“如果...那么,也如果...。那么,但如果都不这样做。...”

时间:2019-11-11 18:58:10

标签: c++ if-statement

我已经制作了一个简单的应用程序,可以用c ++玩FizzBu​​zz游戏,尽管这不一定是c ++问题,但是制作if语句的最佳方法是什么呢?

if(x)然后:a,
if(y)然后:b,
if(x)和if(y)然后:a和b,
如果没有,那么:

这是我目前的方法:

#include <iostream>
using namespace std;

int main ()
{
    int factor1 = 7;
    int factor2 = 15;
    bool found = false;
    string factor1_word = "Fizz";
    string factor2_word = "Buzz";
    int n = 1000;
    for (int i = 1; i < n+1; i++)
    {
        if (i % factor1 == 0)
        {
            cout << factor1_word;
            found = true;
        }
        if (i % factor2 == 0)
        {
            cout << factor2_word;
            found = true;
        }
        if (found == 0)
        {
            cout << i;
        }
        cout << endl;
        found = false;
    }
    return 0;
}

这是可行的,但我觉得它不是最易读也不是最好的方法。

任何建议都会很棒,谢谢。

3 个答案:

答案 0 :(得分:1)

您要实现以下目标:“ if(x)然后:a,if(y)然后:b,if(x)和if(y)然后:a和b,如果都不是:”。但是,显然您暗示,您不希望在“ x&y”情况下将“ a”反应放在专门针对该情况的反应之上;而且您通常只希望一个反应。

仅此而已,就完全像这样编码了。

if     (x && !y)  { a(); }
else if(y && !x)  { b(); }
else if(x &&  y)  {a(); b(); /* or maybe a_and_b() to make sense */}
else {/* nothing */}

&& !实现了“但如果...则不行”。请注意,逻辑与运算符&&代替了位运算符&(我一开始就犯错了,或多或少是一个错字),在某些情况下onyl偶然会得到所需的行为。 else使“总是只有一个”。
没有else {}的最后一个if将“对x或y都不做任何操作”变成
“对于任何未明确涵盖的情况,均不做任何事情”。我建议您这样做,始终明确地对“其他所有内容”进行编码,以便有机会在实际上并非所有可能的情况下都注意到。

要使所有(在两个二进制输入为4的情况下)情况清楚地分类,请阅读Karnaugh Veitch图(https://en.wikipedia.org/wiki/Karnaugh_map)和相应的逻辑优化。

答案 1 :(得分:0)

for(int i = 0; i

总是从零开始,因为0是大多数数据结构(如数组或向量)的起始索引,并尝试使代码保持简单易读,因此u的执行方式是最有效的方式,因为运行时效率无论哪种情况,for循环的阶次都将是o(n)

您可以使用(!found)代替(found == 0)

答案 2 :(得分:-3)

for(int i = 0; i

总是从零开始,因为0是大多数数据结构(如数组或向量)的起始索引,并尝试使代码保持简单易读,因此u的执行方式是最有效的方式,因为运行时效率无论哪种情况,for循环的阶次都将是o(n)

您可以使用(!found)代替(found == 0)