创建一个动态数组,包括car's year和make但无法保存我的第一个输出

时间:2014-03-07 17:30:41

标签: c++ arrays loops structure

我正在处理输出为的特定问题: 您希望编目多少辆汽车:输入 汽车#1: 请输入make:input_make1 请输入年份:input_year1

车#2: 请输入make:input_make2 请输入年份:input_year2

这是你的收藏: input_year1 input_make1 input_year2 input_make2

我的代码完成了90%,但在我的“这是你的收藏输出”中,我无法保存第一个。请帮助。

   #include<iostream>
   using namespace std;
   struct car
   {
    char make[60];
    int year;
   };
   int main(void)
    {
    cout<<"How many cars do you wish to catalog: ";
int j;
cin>>j;
cin.get();
car *ps=new car;
int i;
for(i=1;i<=j;i++)
{
for (i=1;i<=j;i++)
{
cout<<"car# "<<i<<": "<<endl;
cout<<"Please enter the make: ";
cin.get(ps->make,60);
//cout<<"\n";
cout<<"Please enter the year it was made";
cin>>ps->year;
cin.get();
}
cout<<"Here is your collection: \n";
cout<<ps->year<<" "<<ps->make;
}

 return 0;
}

4 个答案:

答案 0 :(得分:1)

如果通过“保存第一个”你的意思是数组的第一个元素,那么我将指出C ++中的数组从索引0开始。因此,相应地调整你的循环:for (i = 0; i < j; ++i )

但是你有更大的问题,例如错误地使用动态分配和泄漏内存等。如果你想分配汽车数组(也就是多个),那么这样做:car* ps = new car[j];

然后,您需要明确删除它们,以便在使用完数据后不使用数组删除运算符泄漏内存:delete [] ps;

如果要遍历此动态分配的汽车数组并更新特定汽车结构元素的成员,请再次使用数组运算符:cin >> ps[i].year;

答案 1 :(得分:1)

您无法保存条目,因为您只有一个汽车对象和一个指针,因此您只需更改该对象的值即可。您需要创建一个汽车对象数组。

答案 2 :(得分:1)

您可以在制作时将汽车结构存储在矢量中并填充它们。 确保你#include <vector>

vector<car *> stored_cars;

for ( int i = 0; i < num_cars; ++i ) {
    car * ps = new car;
    // populate ps with data
    stored_cars.push_back(ps);
}

for ( vector<car *>::iterator it = stored_cars.begin(); is != stored_cars.end(); ++it ) {
    // you can dereference it to get at the car pointer
    (*it)->blah

    // make sure you delete the dynamically allocated structs when you are done with them
    delete (*it);
}

更好的方法是不要为汽车使用动态分配的内存。 你有一个汽车矢量vector<car>,你只需要从堆栈中推回汽车,并且不必担心在完成后将它们全部删除(vector的析构函数会处理它)

答案 3 :(得分:1)

我发现您的代码存在一些问题。据我所知,你试图从用户(j)获得一些汽车,存储它们,然后将它们打印出来。问题是您只有一个存储变量(ps)。每次第二个循环迭代时,它都会覆盖ps变量。要解决此问题,您需要创建一个大小为j的数组。我建议使用向量,因为您不知道编译时的大小:

std::vector cars;
//Gets the input from the user
for(int i = 0; i < j; ++i){
    car temp;
    temp.make = inputStuff;
    temp.year = moreInputStuff;
    cars.push_back(temp);
}
//Prints the array out
for(int i = 0; i < cars.size(); ++i){
    cout << cars[i].make << " " << cars[i].year;
}

另一个问题是你的双循环。因为它们对迭代器(i)使用相同的变量,所以一旦内部循环退出,外部循环也将退出。