【问题标题】:Array of structures in C++:assignment of values to each structure in arrayC++中的结构数组:为数组中的每个结构赋值
【发布时间】:2012-08-18 13:25:16
【问题描述】:

我在下面声明了一个结构体 st,它带有一个结构体变量 arr[],一个结构体数组。 我试图将值 1 分配给“num”变量,并将值 1 到 10 分配给数组 arr[] 的前 10 个位置的“val”变量。并且值 2 到“num”,值 1 到 10 到接下来 10 个位置的“val”。但是当我跟踪代码时,它不会将值分配给同一数组位置的相应 num 和 val 。如果我想将 num=1 和 val=4 分配给第 4 个结构,它会将 num=1 分配给第 3 个结构的 val,将 val=4 分配给第 4 个结构的 num。

我的查询与数组索引无关。

问题是:

如果我写了陈述

arr[2].num=1; arr[2].val=2;

({num,val})

预期结果是:arr[2]={1,2}

但实际结果是: arr[1]={num,1} arr[2]={2,val}

#include<iostream.h>
#include<conio.h>


class abc
{

 public:

 struct st
 {
  int num;
  int val;
 };

 st arr[21];

 void funct();

};

void abc::funct()
{
 int i,j,k=1;

 for(i=1;i<=2;i++)
 {
  for(j=1;j<=10;j++)
  {
   arr[k].num=i;
   arr[k].val=j;
   k++;
  }
 }

}


int main()
{
 abc z;

 z.funct();

 return 0;
}

【问题讨论】:

    标签: c++ arrays struct


    【解决方案1】:

    1) 数组是基于 0 的,即索引从 0 开始并上升到 arraySize - 1(来自您的声明)。
    2) 浏览您的代码并查看每一行在做什么...
    3) 现在想想你需要做什么:
    3.1) 遍历数组的每个元素
    3.2) 为每个元素访问结构
    3.3) 在你想要设置的结构内部
    num = 1 到 first 10 个元素和 2 到 第二 10 个元素(您在这里看到任何简单的数学规则吗?)
    val = arrayElementIndex(这太简单了)

    查看您的代码并考虑如何完成。

    【讨论】:

    • 1) 执行 k=1 会将值分配给 arr[0]。 k=2 到 arr[1] 等等 但它仍然将 'val' 分配给 arr[k] 的 num 和 'num' 给前一个结构。发生这种情况:如果我想为每个结构分配以下 {num,val} 值:with k=1, arr[0]={1,1 arr[1]={1,2} arr[2]= {1,3} arr[3]={1,4} ,它实际上分配了以下值: arr[0]={1,1} arr[1]={2,1} arr[2]={3 ,1} arr[3]={4,1} 2) 在 arr[0] 处,'num' 被分配给第 (-1) 个结构的 'val','val' 被分配给第 0 个结构的 'num'。我不明白这怎么会发生。希望您理解我的问题。
    • 我的查询与数组索引无关。问题是:如果我写了语句 arr[2].num=1; arr[2].val=2; ({num,val}) 预期结果是:arr[2]={1,2} 但实际结果是:arr[1]={num,1} arr[2]={2,val}
    • @user1460936 我只是按原样运行代码(因为我建议您更改它)并且它可以正常工作。它确实具有arr[i].num = ?; arr[i].val = i; 的分配,并产生正确的结果。请重新编写您的代码并发布更正的版本。然后我们就能看到你做错了什么。
    • 我写的代码对于我想做的任务是正确的,即:arr[k].num=i; arr[k].val=j;但它显示的输出不正确。请运行我编写的代码。我已经编辑了我的问题并显示了实际输出和我想要的内容。 @germann
    • 我想做的作业非常简单。我真的很惊讶为什么它不会做出适当的分配。
    【解决方案2】:

    http://www.cplusplus.com/doc/tutorial/arrays/

    如果您想访问名为 arr 的数组中的第一个元素,那么您可以通过 arr[0] 来完成。

    所以如果你这样做可能会有所帮助:

    int i,j,k=0;

    【讨论】:

    • 发帖人明确表示要分配位置1-20。为什么他们跳过 0,我不知道。
    • 1) 执行 k=1 会将值分配给 arr[0]。 k=2 到 arr[1] 等等 但它仍然将 'val' 分配给 arr[k] 的 num 和 'num' 给前一个结构。发生这种情况:如果我想为每个结构分配以下 {num,val} 值:with k=1, arr[0]={1,1 arr[1]={1,2} arr[2]= {1,3} arr[3]={1,4} ,它实际上分配了以下值: arr[0]={1,1} arr[1]={2,1} arr[2]={3 ,1} arr[3]={4,1} 2) 在 arr[0] 处,'num' 被分配给第 (-1) 个结构的 'val','val' 被分配给第 0 个结构的 'num'。我不明白这怎么会发生。
    • 我的查询与数组索引无关。问题是:如果我写了语句 arr[2].num=1; arr[2].val=2;预期结果是:arr[2]={1,2} ({num,val}) 但实际结果是:arr[1]={num,1} arr[2]={2,val}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2019-10-30
    • 2016-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    相关资源
    最近更新 更多