2016-09-12 8 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 «s , это эффективно проглатывает весь файл, одно слово с разделителями пробела за раз, в вектор.

И к тому времени, когда все обходит цикл getline, весь файл уже прочитан, и цикл абсолютно ничего не делает. Ваш getline на самом деле ничего не делает, с текущим положением дел.

Избавиться от этого материала, который включает в себя istream_iterator с, полностью, и просто дать getline выполнить задание, для которого оно предназначалось.

+0

Ничего себе. Большое спасибо, неудивительно, что меня отбросили - вот пример, который преподал нам мой инструктор, а также говорит нам использовать getline. Довольно новый для C++, поэтому я бы никогда не поймал этого, ха-ха. –