我正在尝试在我的c ++项目中使用一个结构但是我遇到了一些问题。在我的项目中,我在询问用户已完成销售的人数以及他们工作了多少天后创建了一个动态数组。之后程序通过for循环来输入数据。在这里,要求用户输入人的名字,然后它询问前一天的单位数,直到第二个for循环达到用户输入其中的最大天数是我的问题。我尝试使用二维动态数组使程序不断崩溃,所以我不确定我做错了什么。这是我的代码:
#include <iostream>
#include <string>
struct emp{
string names;
int *untsold;
};
int main(){
int people;
int days;
emp *workers;
cout<<"How many workers are we looking at?"<<endl;
cin>>people;
cout<<"How many days are we looking at?"<<endl;
cin>>days
workers = new emp[people,days];
for(int index=0;index<people;index++){
cin.ignore();
cout<<"Enter the name of worker number "<<index+1<<"."<<endl;
getline(cin,emp[index,0].names);
for(int index2=0;index2<days;index++){
cout<<"Now enter the number of units sold on day "<<index2+1<<endl;
cin>>*workers[index,index2].untsold;
}
}
}
程序的其余部分只是在表格中显示信息,然后删除动态数组。在我输入* workers [index,index2] .untsold变量之后,程序似乎崩溃了。是否可以在动态数组中放置一个变量数组,或者我应该尝试其他方法。请注意,我的老师要我使用结构变量和动态数组,还要注意我是初学者。
答案 0 :(得分:2)
将std::vector
用于动态大小数组。
要实现矩阵,最简单和最有效的方法是使用单个vector
来保存所有项目,然后在矩阵中指定(x,y)位置的单个向量中计算索引。
如果您想要(x,y)索引的运算符表示法,请使用operator()
(可以使用任意数量的参数),而不是operator[]
(只能使用一个参数)。技术上可能使用方括号索引的多个应用程序,但它变得复杂和快速,取决于代表对象的代理对象 - 所以请使用命名操作,或{ {1}}。
答案 1 :(得分:1)
new emp[people,days]
不分配二维数组 - 逗号运算符评估左侧,抛弃结果,然后返回右侧的值。
代码等同于
new emp[days]
因为你永远不会分配任何结构的untsold
meber,
*workers[index,index2].untsold;
相当于
*workers[index2].untsold
取消引用一个未初始化的未初始化指针。
最好使用std::vector
,但如果你正在尝试了解数组,那么你应该重新阅读那篇精美的C ++书籍。