Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我得到的是1、10、110、1110等,而不是1、10、100、1000等。? 我是一个C++初学者。_C++_Iteration - Fatal编程技术网

为什么我得到的是1、10、110、1110等,而不是1、10、100、1000等。? 我是一个C++初学者。

为什么我得到的是1、10、110、1110等,而不是1、10、100、1000等。? 我是一个C++初学者。,c++,iteration,C++,Iteration,我试图用std::size\t创建一个循环,但我不确定是否正确使用了它。变量(i)应该从1开始,然后迭代哪个i 值应为1、10、100、1000、10000 然后你想要这样的东西: for (std::size_t i = 1; i <= 10000; i *= 10) std::cout << i << " \n"; for(std::size\u t i=1;i在显示i之前,您的循环将i乘以10,因此您永远看不到打印出来的1。在将i

我试图用
std::size\t
创建一个循环,但我不确定是否正确使用了它。变量(
i
)应该从
1
开始,然后迭代哪个
i
值应为1、10、100、1000、10000

然后你想要这样的东西:

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

for(std::size\u t i=1;i在显示
i
之前,您的循环将
i
乘以
10
,因此您永远看不到打印出来的
1
。在将
i
乘以
10
之后,您也将
i
增加
1
,在这种情况下您根本不应该这样做

让我们浏览一下逻辑:

  • 在第一次迭代中,
    i
    1
    开始,然后乘以
    10
    ,因此打印
    10
    ,然后将
    i
    增加
    1

  • 在第二次迭代中,
    i
    11
    ,它乘以
    10
    ,因此打印
    110
    ,然后
    i
    增加
    1

  • 在第三次迭代中,
    i
    111
    ,它乘以
    10
    ,因此打印
    1110
    ,然后
    i
    增加
    1

等等

要解决此问题,您需要完全去掉
i+=1
,并将
i*=10
移到循环体的外部,然后移到循环计数器中,例如:

intmain()
{

对于(std::size_t i=1;i,虽然其他答案正确地解释了您的问题所在,但如果您使用调试器一步一步地执行它,那么您可以在不询问的情况下解决这个问题

以下是关于在Linux和Windows上调试的两个Stackoverflow问题:

(这是关于调试C程序,但同样的工具和环境也可以用于调试C++程序)。 如果您要调试程序,单步执行各个命令,您会注意到@RemyLebeau-yourself所做的一系列更改


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

代码执行
i+=1
i*=10
。除了在循环的每次迭代后乘以10,您添加一个,因此每次迭代之前
i
的值为1、11、111、1111,…。顺便说一句,
size\u t
的使用与使用另一个足够大的积分类型相比没有任何变化大型。在这种情况下,用
int
unsigned long long
替换
std::size_t
将得到完全相同的输出。试着拿起笔和纸,想象自己是一台计算机,只需在每次迭代中记下
i
i*=10的值。不需要进行10000次迭代,您就可以了清楚地看到在3之后的一个点。考虑使用调试器。如果您有一个像VisualStudio中的一个这样的调试器,或者甚至是GDB,那么您会发现错误是什么,您会比在发布一个问题时所看到的bug少。这是因为您知道密钥是如何使调试器一次执行1行而不是RU的。完成程序。你还必须在每一步查看变量。虽然答案是正确的,但我觉得它不完整。用原始代码添加问题的解释将有助于完成此答案。在问题的注释中已经有两个对问题的完美解释。我只想解决了这个问题。@Blindy关于你的第一条评论,这个网站的性质意味着答案会隐含地引发批评。评论可能会在任何时候消失。在这种情况下,一个好的答案应该是合理完整的,这意味着添加解释,即使它出现在评论中…@Blindy似乎你希望用户保留他们的c除非帖子作者明确要求,否则不要评论该帖子。这不是本网站的工作方式。无论帖子作者是否要求反馈、评论或意见,这都是无关紧要的。整个网站都是围绕同行评议构建的。你可以不同意反馈,但你不能简单地因为没有提示就将其驳回。这是最好的答案谢尔盖亚:好吧,它要么给出这个答案,要么把其他任何一个关于“为什么我的程序不做我想做的事情”的问题当作一个骗局