C++ 函数练习 - 不断返回零

标签 c++ loops c++11 reference

完全初学者。

练习是制作一个接受输入的函数,如果输入是偶数,则完成一定的计算。如果奇数,计算完成。然后重新分配新值,序列继续直到达到 1。

例子: 如果起始整数为 1,则返回值应为 0,因为无需任何步骤即可达到 1。如果起始整数为 3,则序列为:3、10、5、16、8、4、2、1,返回值应为 7。

几个小时以来一直在搞乱这个,我一直从计数器返回 0。

(main() 仅用于测试目的)

谢谢

#include <iostream>

using namespace std;

int hailstone(int outinput);

int main()
{
  int outinput=10, counter;

  hailstone(outinput);

  cout << counter << endl;

  return 0;
}

int hailstone(int outinput)
{
  int counter;

  for(outinput; outinput == 1; )
  {
    if(outinput % 2 == 0)
    {
      outinput = outinput / 2;
      counter++;
    }
    else if(outinput % 2 != 0)
    {
      outinput = outinput * 3 + 1;
      counter++;
    }
  }

  return counter;
}

最佳答案

您没有收到 hailstone() 返回的内容。

这样做:

counter = hailstone(outinput);

在方法hailstone 中,您增加了counter 而没有初始化它。这将导致您获得未定义的行为。

hailstone方法中初始化counter

int counter = 0;

最后,您的 for 循环终止条件:outinput == 1 是错误的。此条件意味着仅当 outinput1 时循环才会迭代。使用 outinput != 1 意味着您将循环迭代直到 outinput 变为 1

Live run here.

关于C++ 函数练习 - 不断返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31495207/

相关文章:

c++ - qt form fullscreen 有时会越过 ubuntu 顶部 Pane ,有时不会

c++ - 如何优化多重映射的删除

javascript - 延迟 for 循环内的 javascript 代码执行

替换由另一个矩阵索引的矩阵元素

c++ - 为简单结构定义哪个复制/move 构造函数/运算符?

c++ - 迭代地从二叉搜索树中删除节点

c++ - 检查所有字符串(小说列表)中是否存在任何字母(a-z)并打印找到的字母数的程序

c++ - 文件 RecvFile 函数中的预期标记错误

java - 用Java读取文本文件并通过递归向后打印

C++11 lambda 和模板特化