为什么我得到的是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除非帖子作者明确要求,否则不要评论该帖子。这不是本网站的工作方式。无论帖子作者是否要求反馈、评论或意见,这都是无关紧要的。整个网站都是围绕同行评议构建的。你可以不同意反馈,但你不能简单地因为没有提示就将其驳回。这是最好的答案谢尔盖亚:好吧,它要么给出这个答案,要么把其他任何一个关于“为什么我的程序不做我想做的事情”的问题当作一个骗局