如何在c ++中读取txt文件中的一部分行

时间:2014-10-19 19:44:50

标签: c++ text-files

我正在尝试读取文本文件中的一部分行。 文本文件包含电影的数量,奖励的数量,电影被提名的次数以及电影名称。文本文件如下所示:

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;

}

1 个答案:

答案 0 :(得分:2)

这无法编译:

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

numofmovies不是常量编译时值,因此您不能使用它来声明这样的数组。你应该使用vector。

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;
}