【问题标题】:Trying to create a better loop for naming array elements尝试创建一个更好的循环来命名数组元素
【发布时间】: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


【解决方案1】:

只需再次执行 i+1。

for (int i = 0; i < 12; i++) 
{
    cout << "Month number " << i + 1 << endl;
    array[i] = i + 1;
}

现在很明显,您实际上是想从 1 开始到 12,所以这似乎更好,重复更少:

 for (int i = 1; i <= 12; i++) 
 {
     cout << "Month number " << i << endl;
     array[i-1] = i;
 }

编辑:至于您的编辑,这是因为 i++ 运算符适用于特定的 i 变量。它将现有 i 加 1,以便下次访问 i 时,它会比以前多 1。

另一方面,写 i+1 会创建一个全新的临时变量(实际上是一个常量)。所以当你写

array[i] = i+1; 

您是说您希望 i 保持不变,但您想创建一个比 i 大的新数字,并将该新数字放入数组中。

您甚至可以将其写得更长,以便完全明确:

int newNumber = i+1;
array[i] = newNumber;

【讨论】:

    【解决方案2】:
    for (int i = 0; i < 12; i++) {
        cout << "Month number " << i + 1 << endl;
        array[i] = i+1;
    }
    

    没有理由在循环中增加 i

    【讨论】:

    • 显然 OP 想要将 0-11 存储在 array 并打印 1-12。
    猜你喜欢
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 2020-03-07
    • 2016-03-03
    • 2016-09-18
    • 1970-01-01
    相关资源
    最近更新 更多