getline с разделителем, хранящим пустой символ - PullRequest
4 голосов
/ 12 апреля 2011

Я пытаюсь ввести текстовый файл с разделителями с помощью getline, но когда я отлаживаю его, он показывает, что в начале переменной есть пустой символ.

Это происходит только с моей переменной tID, которая оказывается первой в каждой строке.Когда я отлаживаю, он показывает это как массив символов:

[0] = '' [1] = '2' [2] = '3' [3] = '4'

Вот соответствующий код:

ifstream inFile("books.txt");
if (!inFile){
    cout << "File couldn't be opened." << endl;
    return;
}
while(!inFile.eof()){
    string tID, tTitle, tAuthor, tPublisher, tYear, tIsChecked;
    getline(inFile,tID, ';');
    getline(inFile,tTitle, ';');
    getline(inFile,tAuthor, ';');
    getline(inFile,tPublisher, ';');
    getline(inFile,tYear, ';');
    getline(inFile,tIsChecked, ';');
    library.addBook(tID, tTitle, tAuthor, tPublisher, tYear, (tIsChecked == "0") ? false : true);
}

Вот несколько строк book.txt:

123;C++ Primer Plus; Steven Prata; SAMS; 1998;0;
234;Data Structures and Algoriths; Adam Drozdek; Course Technlogy; 2005;0;
345;The Art of Public Speaking; Steven Lucas;McGraw-Hill;2009;0;
456;The Security Risk Assessment Handbook; Douglas J. Landall;Auerbach;2006;1;

1 Ответ

4 голосов
/ 12 апреля 2011

Поскольку ; является разделителем для getline, он не использует символ новой строки. Добавьте вызов getline без явно определенного разделителя или ignore( numeric_limits<streamsize>::max(), '\n' ) в конец цикла. Это имеет «бонус» игнорирования данных после последней точки с запятой.

Бонусный диагностический код: http://ideone.com/u9omo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...