2016-09-12 18 views
1

基本的に私の問題は、数字とコメントでいっぱいの.txtファイルからデータを読み込み、各行を文字列ベクトルに格納しようとしていますが、C++: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); 
} 

そして、これは何である:最初の空白文字でそう(*コメント*)のようなコメントが

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

これはgetl​​ine関数のための私のコードブロックのように見えるものであるに分割されます。 txtファイルは次のようになります。

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

私はなぜそれが行全体を読んでいないのか分かりません。

答えて

3

これは、コードがstd::getlineを使用して入力ファイルを読み取っていないという単純な理由によるものです。

あなたは非常に慎重にあなたのコードを見れば、あなたはあなたもそのポイントに到達する前に、あなたのコードは、ファイルにistream_iterator<string>を構築し、それを渡すことでいることがわかります、とvectorのコンストラクタに終了istream_iterator<string>値一度に1つの空白で区切られた単語の1つをファイル内に効果的に埋め込みます。

そして、ループがgetlineループに回ってくると、ファイル全体がすでに読み込まれており、ループはまったく何もしません。あなたのgetlineは現在の状態では何もしていません。

istream_iteratorが完全に含まれているものを取り除き、単にgetlineが意図した仕事をさせてください。

+0

ワウ。おかげさまで、私は捨てられたのも不思議ではありません - それは私のインストラクターが私たちにgetlineを使うように言っている間に使ってくれた例でした。 C++にはまったく新しいので、私はそれを捕まえたことはないでしょう、笑。 –

関連する問題