为什么我得到 1、10、110、1110 等而不是 1、10、100、1000 等?

时间:2021-03-30 18:46:27

标签: c++ iteration

我是 C++ 的初学者。

我正在尝试使用 std::size_t 创建一个循环,但我不确定我是否正确使用它。变量 (i) 应从 1 开始并迭代 i <= 10000。每次迭代时,i 应该乘以 10。

因此,值应为 110100100010000

但是,我得到了 10110111011110

int main()
{
    for (std::size_t i = 1; i <= 10000; i += 1)
    {
        i *= 10;
        std::cout << i << " \n";
    }
}

3 个答案:

答案 0 :(得分:4)

您的循环将 i 乘以 10 before 显示 i,因此您永远不会看到 1 被打印出来。然后你还增加 i 1 after 乘以10,你根本不应该这样做这种情况。

让我们来看看逻辑:

  • 在第一次迭代中,i1开始,乘以10,所以打印10,那么i为增加 1

  • 在第二次迭代中,i11,乘以10,所以打印110,然后i递增来自1

  • 第三次迭代,i111,乘以10,所以打印1110,然后i递增来自1

等等。

要解决此问题,您需要完全去掉 i += 1,并将 i *= 10 移出循环 body 并移入循环 counter,例如:

int main()
{
    for(std::size_t i = 1; i <= 10000; i *= 10)
    {
        std::cout << i << " \n";
    }
}

Demo

答案 1 :(得分:2)

<块引用>

值应该是 1, 10, 100, 1000, 10000

那么你想要这样的东西:

for (std::size_t i = 1; i <= 10000; i *= 10)
    std::cout << i << " \n";

答案 2 :(得分:0)

虽然其他答案正确地解释了您的问题是什么,但如果您使用调试器逐步执行它,您可以在不在这里询问的情况下弄清楚这一点。

这里有两个关于在 Linux 和 Windows 上调试的 Stackoverflow 问题:

(这些是关于调试 C 程序,但同样的工具和环境也可用于调试 C++ 程序。)

如果您要调试程序,逐步执行单个命令,您会注意到@RemyLebeau describes - 您自己的更改顺序。

此外,为了将来参考 - 大多数 StackOverflow 用户都希望提问者执行他们的“尽职调查”,在向我们寻求解决方案之前做出合理的努力来找出他们的问题。既然您已经了解了调试器 - 请在询问“为什么我的程序没有按照我的预期运行”之前使用一个。