我正在尝试使用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;
答案 0 :(得分:4)
因为;
是getline
的分隔符,所以它不会使用换行符。在没有明确指定的分隔符的情况下添加getline
调用,或者在循环结束时添加ignore( numeric_limits<streamsize>::max(), '\n' )
。这具有在最后一个分号后忽略数据的“奖励”。
额外诊断代码:http://ideone.com/u9omo