我无法理解如何创建指向结构的指针数组。我试图在论坛中查找类似的示例和线程,但我仍然无法让我的代码工作!结果,我相信我写了一段丑陋的代码,我不知道哪里出错了以及如何修复它。 这是代码:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct Movie
{
string name;
int numawards;
int nomination;
int year;
};
void *readfile(ifstream &infile, int &n);
int main()
{
ifstream infile;
int n = 0;
infile.open("old_movies.txt");
Movie *oldmovies;
oldmovies = readfile (infile, n);
return 0;
}
//*function documentation//
void *readfile (ifstream &infile, int &n)
{
infile >> n;
Movie *movies;
movies = new Movie[n];
for (int i = 0 ; i < n ; i++)
{
infile >> movies[i]->year >> movies[i]->numawards >> movies[i]->nomination;
infile.ignore();
infile.ignore();
getline(infile, movies[i]->name);
cout << movies[i]->year << " " << movies[i]->numawards << " " << movies[i]->nomination << " " << endl << movies[i]->name<< endl; //the cout here is to test and see if the code works.
}
return movies;
}
此代码的目的是读取包含电影名称,奖励数量,提名方式以及生成年份的txt文件,然后使用指针将其打印出来。这是文件的样子:
2
1935 1 3
The Dark Angel
1935 4 6
The Informer
1935 1 8
前4位代表年份,第2位代表获奖的数量,最后一位代表获奖提名的次数。
无论如何,我被困在这一部分,我真的不知道该怎么做。我只是希望这个代码并没有那么糟糕到有很多东西需要改变。任何帮助或建议将不胜感激。
答案 0 :(得分:0)
让我们看看你在这里有什么:
Movie *movies;
movies = new Movie[n];
这将分配Movie
个实例的数组。要动态分配指针数组,需要将其更改为
Movie** movies;
movies = new Movie*[n];
现在在for循环中,您需要分配每个Movie
实例:
movies[i] = new Movie();
您还应该更改readfile()
以返回Movie**
而不是void*
,以便您以后不必使用任何演员表。
但你真的需要一系列指针吗?为什么不使用一组结构。这样可以避免额外的间接级别,并使代码更简单。