2016-09-12 123 views
1

基本上我的问题是,我试图从一个.txt文件中读取数据,该文件充满数字和注释,并将每行存储到一个字符串向量中,但是我的getline函数停止读取在第一个空格字符所以像(*注释*)评论被分成C++:Getline首先停止读取空格

str[0] = "(*"; 
str[1] = "comment"; 
str[2] = "*)"; 

这就是我对getline函数的代码块的样子:

int main() { 
string line; 
string fileName; 
cout << "Enter the name of the file to be read: "; 
cin >> fileName; 

ifstream inFile{fileName}; 

istream_iterator<string> infile_begin {inFile}; 
istream_iterator<string> eof{}; 
vector<string> data {infile_begin, eof}; 
while (getline(inFile, line)) 
{ 
    data.push_back(line); 
} 

这是什么。 txt文件看起来像:

101481 
10974 
1013 
(* comment *) 0 
28292 
35040 
35372 
0000 
7155 
7284 
96110 
26175 

我不明白为什么它不读取整行。

回答

3

这是非常简单的原因,您的代码不使用std::getline来读取输入文件。

如果你在你的代码看起来很仔细,你会看到之前,你甚至可以到这一点,你的代码的文件构建一个istream_iterator<string>,并通过它,结束istream_iterator<string>价值的vector的构造,这有效地将整个文件(一次一个空格分隔的单词)吞入矢量中。

到了getline循环的时候,整个文件已经被读取了,循环完全没有任何问题。以目前的情况来看,你的getline实际上并没有做任何事情。

摆脱那些涉及istream_iterator的东西,完全,并让getline完成它的目标。

+0

哇。非常感谢,难怪我被抛弃了 - 这是我的老师告诉我们使用的例子,同时也告诉我们使用getline。相当新的C++,所以我从来没有抓到,哈哈。 –