【问题标题】:C++: stopping last increment in my Fizz Buzz programC++:停止我的 Fizz Buzz 程序中的最后一个增量
【发布时间】:2020-05-02 02:30:47
【问题描述】:

因此,作为编码挑战的一部分,我尝试在不查看解决方案的情况下用 C++ 制作 Fizz Buzz 程序。对于那些不知道的人,它应该是一个循环,用Fizz替换任何​​能被3整除的数字,用Buzz替换任何​​能被5整除的数字,用FizzBuzz替换任何​​能被两者整除的数字:

1
2
Fizz
4
Buzz
6
7
8
Fizz
Buzz
11
Fizz

我几乎用下面的代码,但是,我有点恼火,即使我希望循环完全停止在 100,我设置程序的方式意味着额外的 1 被添加循环结束后到i。有没有办法阻止我的 FizzBu​​zz 程序超过 100?

#include <iostream>

using namespace std;

int main () {

for (int i = 1; i < 100; ++i){

if (i % 3 == 0 && i % 5 == 0){
    cout << "FizzBuzz\n";
    i = i + 1;
}

if (i % 3 == 0){
  cout << "Fizz\n";
  i = i + 1;
}

if (i % 5 == 0){
  cout << "Buzz\n";
  i = i + 1;
}

cout << i << "\n";

}

}

【问题讨论】:

  • 如果这是一个编码挑战,而您要求我们帮助完成它,这难道不是违背了接受挑战的全部目的吗? >?当您不自己做事时,挑战的意义何在?
  • 发布的代码与上面引用的输出不匹配,并且无论如何它都没有按照您的描述进行。 an extra 1 gets added to i after the loop has ended 循环结束后没有i,因为该变量只存在于循环内部。
  • 你不应该在循环内增加i。使用else 语句
  • @KenWhite • 有些人喜欢用答案做9x9 数独。其他人喜欢做 1x1 数独。
  • @KenWhite:你对你所做的每一件事都采用全有或全无的方法吗?如果是这样的话,我觉得有点对不起你。有些人睡觉。 @dxiv:实际上确实如此,我剪切并粘贴了输出的前 12 个数字,以免太乏味。然而,我感到困惑的是为什么它总是打印101,即使循环应该在 100 结束。

标签: c++ loops if-statement increment


【解决方案1】:

所以我稍微修正了你的代码:

int main()
{
    for (int i = 1; i < 101; ++i)
    {
       if (i % 3 == 0 && i % 5 == 0)
            cout << "FizzBuzz\n";
        else if (i % 3 == 0)
            cout << "Fizz\n";
        else if (i % 5 == 0)
            cout << "Buzz\n";
        else
            cout << i << "\n";

    }

}

每次您执行i = i + 1; 时,它都有点没用,因为您的循环会这样做。另外,我把所有东西都是if else 链,而不是if if 链。这样只有 on 语句才会在任何给定时间执行。还将最大值更改为 101 而不是 100,因为 for 循环将在 101 处停止并且不打印 101 的结果。

希望这会有所帮助:)

【讨论】:

  • 谢谢,很高兴有这个编码论坛可以在沮丧/困惑的时候解决问题。
【解决方案2】:

在 C++ 中,变量有一个生命周期,称为它们的作用域,并且在它们的生命周期到期后它们被删除。在循环声明中定义的 i 具有由 for 循环的右大括号“}”约束的范围。因此,变量 i 在循环之后不存在,仅在循环期间存在。但是,在您提供的代码中,问题是您多次递增 i 。在您的 for 循环中,每次执行 for 循环的主体时都会增加 i ,但在该主体中,当 i 可被 5 或 3 或两者或两者都整除时,您会增加 i 。您可以删除所有 i = i + 1;声明并删除大部分错误。

【讨论】:

  • 等等……i的作用域和事情有什么关系?
  • 问题是关于循环结束后 i 会发生什么。从技术上讲,循环完成后没有 i 因为它已经超出范围。
  • 但是main函数里唯一的就是循环,没有“循环后”吗?
猜你喜欢
  • 2020-04-22
  • 2018-02-02
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
相关资源
最近更新 更多