我正在做一个涉及结构的任务。
您要创建一个包含三个变量的结构,并声明该结构的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)工作。它甚至可能吗?
答案 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在内存中具有相同的结构,否则可能会发生错误。
实际上,如果你访问单个字段太痛苦了,你要么只想直接使用数组,要么重新思考你的代码。