【发布时间】:2021-03-30 18:46:27
【问题描述】:
我是 C++ 初学者。
我正在尝试使用std::size_t 创建一个循环,但我不确定我是否正确使用它。变量 (i) 应该从 1 开始并迭代哪个 i <= 10000。每次迭代,i 应该乘以 10。
因此,值应为1、10、100、1000、10000
但是,我收到了10、110、1110、11110
int main()
{
for (std::size_t i = 1; i <= 10000; i += 1)
{
i *= 10;
std::cout << i << " \n";
}
}
【问题讨论】:
-
代码执行
i += 1和i *= 10。 -
除了在循环的每次迭代之后乘以 10 之外,您还加了一个,所以每次迭代之前
i的值是 1、11、111、1111,...顺便说一句。与使用另一个足够大的整数类型相比,size_t的使用在这里没有任何改变。在这种情况下,将std::size_t替换为int或unsigned long long将得到完全相同的输出。 -
试着拿起笔和纸,想象自己是一台计算机,在每次迭代中写下
i和i *= 10的值。不需要做10000次迭代,3次之后你就会清楚的看到一个点。 -
考虑使用调试器。您会立即看到问题所在
-
我同意,如果您有像 Visual Studio 甚至 gdb 中的调试器,您会在比发布问题更短的时间内看到错误。前提是您知道让调试器一次执行 1 行而不是仅仅运行程序完成的关键是什么。此外,您还必须查看每一步的变量。