每个文件的末尾是否总是有一个换行符(\ n)?

时间:2014-05-29 06:09:01

标签: c++ input stream character newline

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ifstream inStream("input.txt");
    char next;
    inStream.get(next);
    while(! inStream.eof( ))
    {
        cout << (int) next << " ";
        inStream.get(next);
    }
    return 0;
}

file&#34; input.txt&#34;:

ab
c

理论上,正好有四个字符&#39;&#39;&#39;&#39;&#39; \ n&#39;&#39; c&#39; (我自己打字)

但事实上,上述计划的输出是:&#39; a&#39;&#39;&#39;&#39; \ n&#39;,&#39; c& #39;,&#39; \ n&#39;。

有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

我假设您正在编辑linux中的input.txt,而大多数Linux编辑器都会在最后一行结束时使用LF字符。

Windows使用CRLF(\ r \ n,0D 0A)行结尾,而Linux / Unix只使用LF(\ n,0A)。

如果您不希望发生这种情况,请在Windows上编辑文件并将文件复制到Linux并执行相同操作而不更改任何代码。 我用两种方式执行代码并得到低于输出。

在Linux上编辑input.txt时。 97 98 10 99 10

在Windows上编辑input.txt并复制到Linux时。 97 98 13 10 99

希望这有帮助。

答案 1 :(得分:0)

不,不能保证文件以\n结尾 - 或任何字符,甚至是ASCII EOF字符(这对我没有意义)。文件只是任意字节的流。您可以使用零字节文件,1字节,2字节等,但不确定这些字节是什么。

文件DO通常以\n结尾,因为它们是在这样的循环中编写的:

for(int i=0;i<numberOfLines;i++) {

    fs << getSomeText( i ) << endl;
}
fs.close();

请注意endl,这会导致每一行(包括最后一行)以\n结尾。

当然,在Windows上它是\r\n和老式(OS X之前)Mac OS它是\r,只是为了尴尬。