C++ 创建一个动态数组,包括汽车年份和make,但无法保存我的第一个输出

C++ 创建一个动态数组,包括汽车年份和make,但无法保存我的第一个输出,c++,arrays,loops,structure,C++,Arrays,Loops,Structure,我正在处理一个特定的问题,其中输出是: 您希望编目多少辆车:输入 第一辆车: 请输入make:input_make1 请输入年份:输入年1 第二辆车: 请输入make:input_make2 请输入年份:输入年2 这是您的收藏: 输入\年1输入\制作1 输入年份2输入制作2 我的代码已完成90%,但在我的“这里是您的收藏输出”中,我无法保存第一个。请帮助 #include<iostream> using namespace std; struct car {

我正在处理一个特定的问题,其中输出是: 您希望编目多少辆车:输入 第一辆车: 请输入make:input_make1 请输入年份:输入年1

第二辆车: 请输入make:input_make2 请输入年份:输入年2

这是您的收藏: 输入\年1输入\制作1 输入年份2输入制作2

我的代码已完成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;
}

如果保存第一个,你是指数组的第一个元素,然后我会指出C++中的数组在索引0处开始。因此,相应地调整循环:对于i=0;i 但是,您在这方面有更大的问题,例如不正确地使用动态分配和内存泄漏等。如果您想分配一个或多个汽车阵列,请执行以下操作:car*ps=new car[j]

然后,您需要显式删除它们,以便在使用完它们之后,不使用array delete操作符泄漏内存:delete[]ps


如果要循环使用此动态分配的cars数组并更新特定car结构元素的成员,请再次使用数组运算符:cin>>ps[i].year 但是,您在这方面有更大的问题,例如不正确地使用动态分配和内存泄漏等。如果您想分配一个或多个汽车阵列,请执行以下操作:car*ps=new car[j]

然后,您需要显式删除它们,以便在使用完它们之后,不使用array delete操作符泄漏内存:delete[]ps


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

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

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

您可以在创建和填充汽车结构时将其存储在向量中。 确保你包括

更好的方法是不为汽车使用动态分配的内存。
你会有一个车的向量,向量,你只要把车从堆栈中推回,就不用担心在你完成后把它们全部删除。向量的析构函数会处理这个问题,你可以在制作和填充时将你的车结构存储在一个向量中。 确保你包括

更好的方法是不为汽车使用动态分配的内存。
你会有一个向量car,vector,你只需要把车从堆栈中推回,这样你就不用担心在完成后把它们全部删除。vector的析构函数会解决这个问题。我发现你的代码有一些问题。据我所知,您正试图从用户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使用相同的变量,所以一旦内部循环退出,外部循环也将退出

我发现您的代码有一些问题。据我所知,您正试图从用户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使用相同的变量,所以一旦内部循环退出,外部循环也将退出

向量仍然使用动态分配的内存。。。它只是为你管理它-向量仍然使用动态分配的内存。。。它只是为你管理它-是的,我认为只有input_year2 input_make2在输出上可用。There is your collection上的第一个输出已被覆盖。是的,我认为只有input_year2 input_make2在输出上可用。There is your collection上的第一个输出已被覆盖。