我無法理解如何創建指向結構體的指針數組。我試圖在論壇上查找類似的例子和主題,但我仍然無法讓我的代碼工作!因此,我相信我寫了一段醜陋的代碼,我不知道它出錯的地方以及如何解決它。 下面是代碼:創建指向結構體的指針數組
#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