使用数组处理struct元素的输入

时间:2009-09-18 21:06:04

标签: c++ struct

我正在做一个涉及结构的任务。

您要创建一个包含三个变量的结构,并声明该结构的3个实例。 然后程序将要求用户输入9条信息。我不喜欢不必要地输入cout和cin(连续9次?),所以我想我可以使用循环来处理输入,就像我之前使用过数组一样。我试了一下,但到目前为止都没有成功。我对此有所了解吗?

struct Randomstruct {
  int var1, var2, var3;
}

int main() {
  Randomstruct struct1, struct2, struct3;
  for(int i = 1; i<=3; i++) {
    for(int j = 1; j<=3; j++) {
      cout << "Enter data for var" << j << " in struct" << struct(i) << ": ";
      cin struct(i).var(i);
      }
    }
  }
}

我真的很想知道如何使结构(i).var(i)工作。它甚至可能吗?

3 个答案:

答案 0 :(得分:2)

只需稍微调整一下你的语法:

struct Randomstruct
{
    int var[3];  // Use an array to index things by integer.
}; // You forgot this semicoln

int main()
{
    Randomstruct struct[3];  // Again another array

    // Nearly all programming languages used 0 based arrays.
    // So loop from  0 -> (array size -1) ie use smaller than
    for(int i = 0; i<3; i++)
    {
       // Again user 0 based index.
       for(int j = 0; j<3; j++)
       {
           cout << "Enter data for var" << j << " in struct" << struct(i) << ": ";

           // Use the >> operator to get stuff from the stdin.
           // Arrays are indexed via the operator [<index>]
           cin >> struct[i].var[j];
       }
    }
}

答案 1 :(得分:0)

没有

  

struct(i).var(i)不起作用。

你可以制作矢量/数组,但是当你编写任务时它听起来是不允许的。

实施例

struct Randomstruct {
    int var[3];
};

...并使用

进行访问
struct1.var[i]

答案 2 :(得分:0)

你可以这样做,但看起来有点傻:

#include <iostream>

typedef struct _random_struct
{
    int var1;
    int var2;
    int var3;
} random_struct;

typedef struct _other_struct
{
    int var[3];
} other_struct;

union being_lazy
{
    random_struct r;
    other_struct o;
};


int main()
{
    random_struct st[3];
    being_lazy l[3];
    for(int i = 0; i < 3; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            std::cout << "Enter data for var" << j << " in struct" << i << ": ";
            std::cin >> l[i].o.var[j];
        }
    }

    for(int i = 0; i < 3; ++i)
    {
        st[i] = l[i].r;
    }

    for(int i = 0; i < 3; i++)
    {
        std::cout << "struct" << i << ".var1 == " << st[i].var1 << std::endl;
        std::cout << "struct" << i << ".var2 == " << st[i].var2 << std::endl;
        std::cout << "struct" << i << ".var3 == " << st[i].var3 << std::endl;
    }
}

您需要确保random_struct和other_struct在内存中具有相同的结构,否则可能会发生错误。

实际上,如果你访问单个字段太痛苦了,你要么只想直接使用数组,要么重新思考你的代码。