討論區快速選單
知識庫快速選單
軟體開發過程中有哪些資安漏洞? 網路投保旅行平安險 傑米的攝影旅遊筆記
[ 回上頁 ] [ 討論區發言規則 ]
getline,windows和unix換行問題
更改我的閱讀文章字型大小
作者 : chenstine(chenstine)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/7/22 下午 12:41:09
我在記事本打了幾行字,然後存檔a.txt
ex:
a123
a456
a789

我是用cygwin
int main()
{
    ifstream ina("a.txt", ios::in);
    string sth;
    int j = 0, num = 1;
    while (getline(inc, sth)) ++num;
    inc.clear();
    inc.seekg(0);
    string a[num];
    while (getline(inc, sth)) {
     a[j] = sth;
     cout << a[j] << "@" << endl;
     ++j;
    }
}

執行畫面:
@123
@456
a789@

可是如果我直接vi a.txt,結果是我想要的
執行畫面:
a123@
a456@
a789@

這是我自己的推測,不知道對不對
我覺得是因為windows和unix的換行字元不同
如果是這樣有辦法解決嗎?
還是有其他的原因?
作者 : sunyear(coco) VC++卓越專家C++頂尖高手貼文超過2000則
[ 貼文 2421 | 人氣 1485 | 評價 6060 | 評價/貼文 2.5 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人chenstine註記此篇回應為最佳解答 2012/7/22 下午 09:38:45
Windows的文件,換行是\r\n
而unix的文件,換行只有\n
在unix裡用getline去讀windows的文件,\r會被視為一個回車字元。
如果你在unix裡debug,應該可以看到字串多出來的'\r'。
舉個例,在windows文件的這一行:
a123
其實是
a123\r\n
你在unix讀到的會是二個字串:
"a123\r",""
輸出的結果是:
a123
並且Caret回車到最前面'a'的位置,所以接下來的'@'輸出會覆蓋掉'a'變成:
@123
其他的自己同理可推。
在unix裡讀windows的文件,解決的辦法就是,過濾掉'\r';
或是自行撰寫getline函式。
作者 : sunyear(coco) VC++卓越專家C++頂尖高手貼文超過2000則
[ 貼文 2421 | 人氣 1485 | 評價 6060 | 評價/貼文 2.5 | 送出評價 5 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/7/22 下午 09:40:12
更正:
a123\r\n
你在unix讀到的會是一個字串:
"a123\r"
作者 : chenstine(chenstine)
[ 貼文 2 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2012/7/23 下午 03:11:06
感謝你!!解決了~ :D
 板主 : simula
 > C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
C++
1 Raymond 13050 
2 青衫 4760 
3 simula 4690 
4 coco 4030 
5 白老鼠(Gary) 3670 
6 ozzy 2540 
7 Ben 2250 
8 Anderson 1960 
9 windblown 1650 
10 Kenny 1560 
C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.15625