[問題] C++ parse file 問題

看板C_and_CPP作者 (飛天)時間8年前 (2017/07/26 10:07), 8年前編輯推噓0(005)
留言5則, 2人參與, 最新討論串1/1
開發平台(Platform): (Ex: Win10, Linux, ...) Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) gcc version 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)[B 問題(Question): Q1 最後一欄parse 只能到小數點一位,例如吃入資料 只能吃到 10404.7 小數第2欄不見了。 ^^^^^^^^^^^^^^^^^^^ 已解決,parse 無誤,原因是cout 加上 setprecision(7) 即可正確顯示。 Q2 如果檔案格式是用tab 分隔,friend 這邊要怎麼改?? friend std::istream & operator >>(std::istream &in, index_t &p) { char c; in >> p.f1 >> c >> p.f2 >> c >> p.f3 >> c >> p.f4 >> c >> p.f5 >> c >> p.f6; return in; } ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 尚不知如何改 餵入的資料(Input): 0 20170706 1 0 0 10404.79 562 20170706 1 0 94645 10365.74 Sample Code: struct index_t { int f1; int f2; int f3; int f4; int f5; double f6; friend std::istream & operator >>(std::istream &in, index_t &p) { char c; in >> p.f1 >> c >> p.f2 >> c >> p.f3 >> c >> p.f4 >> c >> p.f5 >> c >> p.f6; return in; } }; vector<index_t> g_v_index; int main() { string fileName="/tmp/test.txt"; ifstream fin(fileName.c_str(), ifstream::in); /* ex: 1 20170706 1 0 0 10404.99 2 20170706 1 0 94645 10365.98 */ for(vector<index_t>::const_iterator iter = g_v_index.begin(); iter != g_v_index.end(); ++iter) std::cout <<iter->f1<<" " <<iter->f2<<" " <<iter->f3<<" " <<iter->f4<<" " <<iter->f5<<" " << setprecision(7) << iter->f6 <<std::endl; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.222.218.2 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1501034842.A.E24.html

07/26 10:07, , 1F
問題應該是出在 friend std::istream & operator >>(std
07/26 10:07, 1F

07/26 10:08, , 2F
只是小弟我不知怎麼修改 ^^||| 煩請高手指教一下
07/26 10:08, 2F

07/26 10:53, , 3F
Q1 已解,原來是 cout 的問題 改用 setprecision(7)
07/26 10:53, 3F
※ 編輯: TwoDemon (60.250.19.162), 07/26/2017 10:57:34

07/26 13:13, , 4F
把>> c全部拿掉就好了 stream自己會處理空白(包括\t)
07/26 13:13, 4F

07/27 10:40, , 5F
感謝,真的 OK 了
07/27 10:40, 5F
文章代碼(AID): #1PT_bQua (C_and_CPP)