[問題] tellg會吃資料(dev c++)

看板C_and_CPP作者 (htymrednuht)時間14年前 (2010/04/05 16:37), 編輯推噓3(306)
留言9則, 2人參與, 最新討論串1/2 (看更多)
最近使用tellg, seekg出現了問題 寫了一個測試的檔案 先設立test.txt裡面存 1234567890 9876543210 1234567890 9876543210 1234567890 9876543210 然後test.cpp中寫 ifstream test("test.txt"); string e; test >> e; cout << e << ' ' << test.tellg() << endl; test >> e; cout << e << ' ' << test.tellg() << endl; test >> e; cout << e << ' ' << test.tellg() << endl; system("pause"); test.close(); 結果出來是 1234567890 12 876543210 23 1234567890 34 中間的9不見了 請問這是甚麼原因呢? 謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.97.87

04/05 17:26, , 1F
發現把tellg拿掉讀進來就正確了, 真奇怪 <囧
04/05 17:26, 1F

04/05 17:32, , 2F
而且只有第一行會這樣@@"
04/05 17:32, 2F

04/05 17:40, , 3F
查到的資料是: tellg是用seekg (0, ios::cur) 來實現
04/05 17:40, 3F

04/05 17:41, , 4F
因為在windows底下換行字元存成\r\n, 如果要轉換回\n
04/05 17:41, 4F

04/05 17:43, , 5F
每一個換行就會多減一個字元數來對齊, 這點你在檔案裡
04/05 17:43, 5F

04/05 17:43, , 6F
多加幾個換行就可以知道了
04/05 17:43, 6F

04/05 17:51, , 7F
可以將檔案以二進位格式讀入, 而不要以文字檔的方式
04/05 17:51, 7F

04/05 17:51, , 8F
ifstream test("test.txt", ifstream::binary );
04/05 17:51, 8F

04/05 18:38, , 9F
不好意思,不太懂\r\n換回\n的意思,可以舉例說明嗎?
04/05 18:38, 9F
文章代碼(AID): #1BkQ56v6 (C_and_CPP)
文章代碼(AID): #1BkQ56v6 (C_and_CPP)