我正在处理输出为的特定问题: 您希望编目多少辆汽车:输入 汽车#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;
}
答案 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)使用相同的变量,所以一旦内部循环退出,外部循环也将退出。