【发布时间】:2018-04-25 16:07:15
【问题描述】:
我已经开始学习数组并且刚刚开始练习,但是我在使用循环来命名特定数组中的元素时遇到了一些问题。
我试图制作这段代码,将数字从 1 到 12(类似于一年中的月份)分配给数组内部的整数,这就是我想出的:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int array[12];
for (int i = 0; i < 12;) {
cout << "Month number " << i + 1 << endl;
array[i] = (i++);
}
return 0;
}
我不喜欢的是,我不得不将 for 循环内的递增/递减空间留空。我最初尝试让代码看起来像这样:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int array[12];
for (int i = 0; i < 12; i++) {
cout << "Month number " << i + 1 << endl;
array[i] = i++;
}
return 0;
}
但是这样一来,即使数组的第一个元素正确,后面的元素也没有。我认为这样做的原因是循环的最后一个语句中的 i++ 使 i 的值增加,但我找不到解决方法,而无需添加另一行 i-- 或者像我在我发布的第一个代码。
谁能帮我理解如何制作它,以便我可以将 i 的值(加一)存储在特定数组元素内,而无需在整个循环中增加它(如果可能的话)?
我知道有一些方法可以解决它,就像我在我发布的第一个代码中展示的那样,但它让我很烦恼,所以我想让它在视觉上更令人愉悦。
请记住,我只是一个初学者 :) 提前感谢您的回答,很抱歉问题太长了。
编辑:显然,编码是这样的:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int array[12];
for (int i = 0; i < 12; i++) {
cout << "Month number " << i + 1 << endl;
array[i] = i + 1;
}
cout << array[4] << endl;
return 0;
}
使程序正常运行并且看起来像我想要的那样,但我无法理解为什么会这样:(
编辑 2:显然,正如 UnholySheep 指出的那样,我错过了一个事实,即 + 1 不会修改整数的值,而 ++ 会。 感谢所有回答并解释 ++ 和 +1 工作原理的人!
【问题讨论】:
-
你为什么首先在循环内增加计数器变量?这使您跳过大多数数组值的初始化
-
您可以尝试使用 (i+1) 代替。
-
其实
array[i] = i++;是C++17之前的未定义行为 -
不相关,
std::iota(std::begin(a), std::end(a), 0);顺便说一句,array是现代 C++ 程序中数组的可怕名称,尤其是不明智地用 @ 污染全局命名空间的名称987654327@. -
您的编辑听起来好像您不明白
i++做了什么 - 它修改了i,而i+1没有
标签: c++ arrays loops variables for-loop