Date Tags C++

最近由于要参加老师要求参加的中海油举办的 \(\pi-Frame\) 软件编程比赛 , 准备复习一下 C++, 结果在使用 cin.getline() 接受输入时发现得到的 string 长度有问题 , 导致比较的时候不能得到预期结果 。。。

 打字机

经过一番纠结 , 结果发现原来还是 end of line 问题 。 如果看过老式打印机就会知道 , 打字的时候想要换行要进行两个操作 , 一个是 LF(line feed), 就是拧旋钮把纸张向上移动一行 ; 另一个是 CR(carriage return), 就是板一下把手把打字的那个头移动到一行的最前面 。 在 ASCII 码中 ,LF 对应着 10, 而 CR 对应着 13, 一般用字符表示成 '\n''\r'

Dex Char str
10 LF '\n'
13 CR '\r'

由于历史原因 , 不同系统在处理字符行结尾的时候会加不同的字符 。

Windows Unix-like Old Mac(pre-OSX)
'\n\r' '\n' '\r'

因此 , 文本文件在不同系统下创建和使用时就会出现不兼容的问题 。

我的问题是 , 我在 Windows 上使用 Cygwin, 将 gcc 作为编译器 , 在输入字符时 , 接受的字符串是以 '\n\r' 结尾的 , 而 getline() 则以 '\n' 结尾的方式对其进行处理 。

解决的办法是在 getline() 中特别指定结束符 ,getline(cin, text, '\r'), 可是这么写的代码在别的情形下貌似会出问题 。 期待有更加完美的解决方法 。


Comments

comments powered by Disqus
share -