void createVideoList(ifstream& ifile, Video videoArray[])
{
string title;
string star1;
string star2;
string producer;
string director;
string productionCo;
int inStock;
int count = 0;
Video newVideo;
getline(ifile, title);
while (ifile)
{
ifile >> inStock;
getline(ifile, title);
getline(ifile, star1);
getline(ifile, star2);
getline(ifile, producer);
getline(ifile, director);
getline(ifile, productionCo);
videoArray[count] = Video(inStock, title, star1, star2, producer, director, productionCo);
count++;
}
}
这是我编程分配的代码。它将从.txt文件读入,并将信息放入我创建的类的数组中。
.txt的格式如下:
3 (amount in stock)
Movie Title
Movie Star1
Movie Star2
Movie Producer
Movie Director
Movie ProductionCo
但是,我的代码似乎没有正确地将数据收集到videoArray中。 我刚刚从Java切换,所以我的C ++语法有点生疏。我正确使用getline吗? 如果我尝试输出其中一个索引,它在任何变量中都没有任何内容。提前谢谢!
答案 0 :(得分:4)
Video newVideo;
getline(ifile, title);
while (ifile)
{
ifile >> inStock;
getline(ifile, title);
getline(ifile, star1);
...
这大多是正确的,但有一些问题:
getline
,即循环之外的那个,不应该在那里。应该读什么?>>
与getline
混合时必须小心。 >>
未读取第一行的其余部分 - 具体而言,它会在输入流中保留\n
。使用std::getline
或istream::ignore
删除待处理的行尾。std::vector
而不是数组。尝试:
while (ifile >> inStock && getline(ifile, temporary_string) &&
getline(ifile, title) &&
getline(ifile, star1) &&
...
getline(ifile, productionCo) )
{
videoVector.push_back(Video(inStock, title, ..., productionCo_));
// Or, as a less worthy alternative,
// videoArray[count] = Video(inStock, title, star1, star2, producer, director, productionCo);
// count++;
}
<小时/> 作为您将在未来几周内学习的语言功能的演示,以下是使用现代C ++功能的程序的一个实现:
std::istream&
operator>>(std::istream& is, Video& v)
{
is >> v.inStock;
is.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::getline(is, v.title);
std::getline(is, v.star1);
std::getline(is, v.star2);
std::getline(is, v.producer);
std::getline(is, v.director);
std::getline(is, v.productionCo);
return is;
}
std::vector<Video> void createVideoList(std::istream& ifile)
{
std::vector<Video> result;
std::istream_iterator<Video> begin(ifile), end;
std::copy(begin, end, std::back_inserter(result));
return result;
}