2014-10-19 22 views
0

我想讀取文本文件中的一部分行。 文本文件包含電影的數量,電影的獎勵數量,電影提名獎項的次數以及電影名稱。文本文件看起來像這樣:如何在C++中讀取txt文件中的行的一部分

2 

1935 1 3 

The Dark Angel 

1935 4 6 

The Informer 

我試圖用函數getline()函數,但是當我編譯它,沒有什麼,但垃圾值。

這是我寫

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main() 
{ 
    ifstream infile; 
    int numofmovies; 
    infile.open("old_movies.txt"); 
    infile >> numofmovies; 
    int numawards[numofmovies], nomination[numofmovies], year[numofmovies]; 
    string moviename[numofmovies]; 
    for (int i = 0 ; i < numofmovies ; i++) 
    { 
     infile >> year[i] >> numawards[i] >> nomination[i]; 
     getline(infile, moviename[i]); 

     cout <<moviename[i]<< endl; 


    } 
    return 0; 

} 

回答

2

這不能編譯代碼:

int numawards[numofmovies], nomination[numofmovies], year[numofmovies]; 

numofmovies不是一個常數,編譯時間價值,所以你不能用它來聲明數組類似那。你應該使用矢量。

std::vector<int> numawards(numofmovies); 
std::vector<int> nomination(numofmovies); 
std::vector<int> year(numofmovies); 
std::vector<std::string> moviename(numofmovies); 

順便說一句,你爲什麼不聲明類型Movie這樣的:

struct Movie 
{ 
    std::string name; 
    int numawards; 
    int nominations; 
    int year; 
} 

,然後用它來讀取數據:

std::vector<Movie> movies(numofmovies); 

for (int i = 0 ; i < numofmovies ; i++) 
{ 
    infile >> movies[i].year >> movies[i].numawards >> movies[i].nomination; 
    getline(infile, movies[i].moviename); 

    cout <<movies[i].moviename<< endl; 
} 
+0

是否有其它方法來完成這不使用矢量?因爲我的教授完全跳過了矢量話題。謝謝 – CowEatsGrass 2014-10-19 20:51:05

+0

@CowEarsGrass你可以簡單地在這個for循環中使用一個局部變量,因爲你只是打印它。如果您沒有任何其他用途的數據,請隨時這樣做。 – liran63 2014-10-19 20:57:29

+0

@CowEatsGrass「我的教授完全跳過了這個向量主題」 - 這應該是一個需要考慮的證明。除了'std :: string'之外,類模板'std :: vector <>'很容易成爲整個標準C++庫中最常用的模板,並且* *都可以很好地與這個賦值一起玩。如果教師尚未覆蓋它,請*在*他/她*將*覆蓋它時詢問*,並仔細衡量對該問題的回答,不管它是什麼。 – WhozCraig 2014-10-22 02:41:32