#include<iostream> using namespace std; #include<string> #include<sstream> #include <fstream> #include<vector> class pe {public: stock* s; }; class stock { public: string name; int num; double price1, price2, price3; void print() { cout << num << " " << name << " " << price1 <<" " << price2 << " " << price3 << endl; } }; /* ifstream fin("D:\\data.txt"); string line; Person *p=new Person[3]; while (getline(fin, line)) { int i = 0; stringstream ss(line); ss >> p[i].name >> p[i].age >> p[i].height; p[i].print(); i++; } fin.close(); return 0; */ int main() { string line; pe* p = new pe[3]; ifstream file("D:\\price.txt"); while (getline(file, line)) { int i = 0; int j = 0; stringstream ss(line); ss >>p[i].s[j].num >> p[i].s[j].name >> p[i].s[j].price1 >> p[i].s[j].price2 >> p[i].s[j].price3; p[i].s[j].print(); i++; j++; } file.close(); }以上代码如何修改问题
时间: 2024-02-16 17:13:10 浏览: 53
使用include <iostream>时一定要加using namespace std
这段代码存在一些问题。首先,类 `pe` 中的成员变量 `s` 是一个指向 `stock` 类型的指针,但是在使用时并没有给它分配空间,因此在读取数据时会出现未定义的行为。其次,在读取数据时,`i` 和 `j` 变量的值在每次循环中都被重置为 0,因此无法正确地读取多个 `pe` 对象和多个 `stock` 对象。最后,在读取数据后并没有释放动态分配的内存,会导致内存泄漏。
针对这些问题,可以先将 `pe` 类中的成员变量 `s` 改为 `vector<stock>` 类型的容器,这样就不需要手动分配内存,同时可以动态增减元素。其次,在读取数据时需要使用两个循环变量 `i` 和 `j` 分别表示当前读取的 `pe` 对象和 `stock` 对象的下标。最后,在程序结束前需要手动释放动态分配的内存。
修改后的代码如下:
```
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
class stock {
public:
string name;
int num;
double price1, price2, price3;
void print()
{
cout << num << " " << name << " " << price1 << " " << price2 << " " << price3 << endl;
}
};
class pe {
public:
vector<stock> s;
};
int main()
{
ifstream file("D:\\price.txt");
string line;
vector<pe> p;
while (getline(file, line)) {
stringstream ss(line);
pe new_pe;
stock new_stock;
ss >> new_stock.num >> new_stock.name >> new_stock.price1 >> new_stock.price2 >> new_stock.price3;
new_pe.s.push_back(new_stock);
p.push_back(new_pe);
}
file.close();
for (int i = 0; i < p.size(); i++) {
for (int j = 0; j < p[i].s.size(); j++) {
p[i].s[j].print();
}
}
return 0;
}
```
请注意,这里的代码仅供参考,可能还存在其他问题。在实际编写代码时,请根据具体情况进行修改。
阅读全文