C++ 尝试将字符串中的字符与回车符进行比较无效

C++ 尝试将字符串中的字符与回车符进行比较无效,c++,string,carriage-return,C++,String,Carriage Return,我有一些代码可以读取基于文本的文件格式,因为它使用以下命令检查空行: line == "" 其中line是接收通过getline获得的文本行的字符串 它适用于我自己的基于文本的文件格式,但不适用于另一种基于文本的文件格式(不是我的) 我用gedit打开文件,什么也没看到。越来越少的公用事业公司也没有表现出什么。然后我尝试了vi,结果显示: ^我在所有这些到现在为止看起来都是空的行上(截图如下: 进行了一些研究,似乎在文本模式下打开文件时,我所需要做的只是将其与“\n”进行比较。因此我写了一行:

我有一些代码可以读取基于文本的文件格式,因为它使用以下命令检查空行:

line == ""
其中line是接收通过getline获得的文本行的字符串

它适用于我自己的基于文本的文件格式,但不适用于另一种基于文本的文件格式(不是我的)

我用gedit打开文件,什么也没看到。越来越少的公用事业公司也没有表现出什么。然后我尝试了vi,结果显示:

^我在所有这些到现在为止看起来都是空的行上(截图如下:

进行了一些研究,似乎在文本模式下打开文件时,我所需要做的只是将其与“\n”进行比较。因此我写了一行:

 if (line[0] == '^M' || line[0] == '\n') 
     break;

结束while循环,其中包含“if”,但它不起作用。我需要做什么?

正如您所猜测的,这些
^M
是vi向您显示每行末尾都有回车字符的方式。该文件可能起源于Windows

<> P>正如其他评论者所提到的,回车字符在C/C++中的表示方式是“代码>”R’/CODE,并且该文件中的行结尾几乎肯定是“代码> \r\n>代码>(CRLF)。
因此,现在您知道了它是如何工作的了,您有一些代码要编写。
getline
将删除
\n
,但您必须自己将
\r
(如果有)从行的末尾剥离。转到它。

行[0]=`^ m′/COD> >编译器没有在这里发出警告吗?<代码> '^ m ' /代码>无效,只是您的编辑器显示控件字符的方式。尝试检查<代码> \r\/C> >换行符;<代码> \r>代码>是回车符。<代码> ^ m >代码>您的文本编辑器如何显示字符-C++未解开。等等。你是否会看到这个字符取决于你是如何读取文件的,你没有显示。发布一些代码。然后我尝试了vi,结果显示:--相反,你应该使用二进制编辑器来实际查看其中的值。“回车”和“换行”是我们仍然存在的年代错误。有时组合“\r\n”被称为CRLF。从Unix派生的操作系统(CR被删除)和从DOS派生的操作系统(CR和LF被分开到结束行)之间存在差异。因此,在OSs之间移动文本文件时,您会看到这些差异。