[问题] getline读档案多一行

楼主: bamboopole (竹竿)   2023-10-27 22:05:42
以下是我的程式码
std::ifstream file(dataset);
std::vector<std::vector<std::string>> dataString;
std::string line = "";
while(getline(file, line)){
std::vector <std::string> vec;
boost::algorithm::split(vec, line, boost::is_any_of(delimeter));
dataString.push_back(vec);
}
file.close();
图片是我读的档案的最后端
https://i.imgur.com/2IJwDNB.jpg
档案总行数是32563,最后两行是空白的
我使用getline来读档
但我发现我读出来的vector长度是32562
然后如果我把读的档案的最后两个空白行删掉,结果又是正确的32561
想请问为什么会有这个三个数字的差异
作者: Richun (解放左手的OO之力)   2023-10-27 22:28:00
你档案用wc -l显示的也是32563吗?
作者: nh60211as   2023-10-27 22:40:00
你有试过只多一行吗你对正确的定义怪怪的。getline是去读换行符号来分出一个line是什么,所以就算是没有内容的line也是一个line然后你去看cppreference的话可以看到getline的终止条件是什么,去比对一下你的输入应该就可以知道行为正不正确了
作者: wulouise (在线上!=在电脑前)   2023-10-28 00:27:00
先把最后两行用什么换行符号列出来
作者: longlongint (华哥尔)   2023-10-28 10:34:00
编辑器空行的屁股没有换行符号 所以要少算一行应该是说 空行那行什么都没有…

Links booklink

Contact Us: admin [ a t ] ucptt.com