最近由于要參加老師要求參加的中海油舉辦的pi-Frame軟件編程比賽谦疾,準(zhǔn)備復(fù)習(xí)一下C++,結(jié)果在使用cin.getline()
接受輸入時(shí)發(fā)現(xiàn)得到的string
長度有問題犬金,導(dǎo)致比較的時(shí)候不能得到預(yù)期結(jié)果念恍。六剥。。
經(jīng)過一番糾結(jié)峰伙,結(jié)果發(fā)現(xiàn)原來還是end of line問題疗疟。如果看過老式打印機(jī)就會(huì)知道,打字的時(shí)候想要換行要進(jìn)行兩個(gè)操作瞳氓,一個(gè)是LF(line feed)策彤,就是擰旋鈕把紙張向上移動(dòng)一行;另一個(gè)是CR(carriage return)匣摘,就是板一下把手把打字的那個(gè)頭移動(dòng)到一行的最前面店诗。在ASCII碼中,LF對(duì)應(yīng)著10音榜,而CR對(duì)應(yīng)著13庞瘸,一般用字符表示成'\n'
和'\r'
。
Dex | Char | str |
---|---|---|
10 | LF | '\n' |
13 | CR | '\r' |
由于歷史原因赠叼,不同系統(tǒng)在處理字符行結(jié)尾的時(shí)候會(huì)加不同的字符恕洲。
Windows | Unix-like | Old Mac(pre-OSX) |
---|---|---|
'\n\r' | '\n' | '\r' |
因此,文本文件在不同系統(tǒng)下創(chuàng)建和使用時(shí)就會(huì)出現(xiàn)不兼容的問題梅割。
我的問題是霜第,我在Windows上使用Cygwin,將gcc作為編譯器户辞,在輸入字符時(shí)泌类,接受的字符串是以'\n\r'
結(jié)尾的,而getline()
則以'\n'
結(jié)尾的方式對(duì)其進(jìn)行處理底燎。
解決的辦法是在getline()
中特別指定結(jié)束符刃榨,getline(cin, text, '\r')
,可是這么寫的代碼在別的情形下貌似會(huì)出問題双仍。期待有更加完美的解決方法枢希。