[問題] getline讀檔案多一行

看板C_and_CPP (C/C++)作者 (ㄈㄓ肥竹)時間1年前 (2023/10/27 22:05), 1年前編輯推噓1(1010)
留言11則, 4人參與, 1年前最新討論串1/1
以下是我的程式碼 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 想請問為什麼會有這個三個數字的差異 ----- Sent from JPTT on my iPad -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.70.63.65 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1698415544.A.C32.html

10/27 22:28, 1年前 , 1F
你檔案用wc -l顯示的也是32563嗎?
10/27 22:28, 1F
顯示32562 跟原檔getline得到的一樣

10/27 22:40, 1年前 , 2F
你有試過只多一行嗎
10/27 22:40, 2F
只多一行是32561 是正確的 ※ 編輯: bamboopole (61.70.63.65 臺灣), 10/27/2023 22:53:41 ※ 編輯: bamboopole (61.70.63.65 臺灣), 10/27/2023 22:54:43

10/27 23:03, 1年前 , 3F
你對正確的定義怪怪的。getline是去讀換行符號來分出
10/27 23:03, 3F

10/27 23:03, 1年前 , 4F
一個line是什麼,所以就算是沒有內容的line也是一個li
10/27 23:03, 4F

10/27 23:03, 1年前 , 5F
ne
10/27 23:03, 5F

10/27 23:05, 1年前 , 6F
然後你去看cppreference的話可以看到getline的終止條
10/27 23:05, 6F

10/27 23:05, 1年前 , 7F
件是什麼,去比對一下你的輸入應該就可以知道行為正不
10/27 23:05, 7F

10/27 23:05, 1年前 , 8F
正確了
10/27 23:05, 8F

10/28 00:27, 1年前 , 9F
先把最後兩行用什麼換行符號列出來
10/28 00:27, 9F

10/28 10:34, 1年前 , 10F
編輯器空行的屁股沒有換行符號 所以要少算一行
10/28 10:34, 10F

10/28 10:34, 1年前 , 11F
應該是說 空行那行什麼都沒有…
10/28 10:34, 11F
感謝各位,我懂了 倒數第二行有換行符號,所以才會出現32563行 而最後一行沒有換行符號,所以是直接結束 ※ 編輯: bamboopole (180.217.202.238 臺灣), 10/28/2023 11:36:29
文章代碼(AID): #1bEyEumo (C_and_CPP)
文章代碼(AID): #1bEyEumo (C_and_CPP)