我无法理解如何创建指向结构体的指针数组。我试图在论坛上查找类似的例子和主题,但我仍然无法让我的代码工作!因此,我相信我写了一段丑陋的代码,我不知道它出错的地方以及如何解决它。 下面是代码:创建指向结构体的指针数组
#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位代表年份,第二个代表它已经得到了多个奖项,最后一个数字代表它已经被提名到获奖的次数。
无论如何,我被困在这部分,我真的无能为力在这里做什么。我只希望这个代码没有那么糟糕,以至于有很多事情需要改变。任何帮助或建议将不胜感激。
您声明'Movie * oldmovies;'但使用赋值'oldmovies = readfile(infile,n);'填充数组,但函数具有签名'void * readfile(ifstream&infile,int&n)'。它被声明返回'void',但你试图在函数结尾处返回电影。 – CoryKramer 2014-10-21 22:54:14
考虑在使用它们之前定义函数。优势:无需前瞻性声明。另外,请不要在'istream&'足够的地方使用'ifstream&'参数(并且在使用读取值之前检查您是否成功读取*)。接下来,避免使用'namespace std;',尽管至少它不在标题中。最后,'main'中的'return 0;'是多余的。 – Deduplicator 2014-10-21 23:02:45
附录:避免线路过长,特别是在互联网上发布时。 80个字符绰绰有余。 – Deduplicator 2014-10-21 23:05:18