1

我不明白为什么我的函数tellg()从 0 跳到 2 这是我的代码:

ifstream uploadFile("upload.txt");
 char letter;
    uploadFile.seekg(0);
    cout<<uploadFile.tellg()<<endl;
    while(uploadFile.get(letter))
        cout<<uploadFile.tellg()<<endl;
    return 0;

我的文件包含这一行:

0 TS1

这些是我期望的结果:

0
1
2
3
4
5
6

但我明白了:

0
2
3
4
5
6
7
4

1 回答 1

2

您的文件upload.txt可能以空行开头:


0 TS1

ifstream文本模式下(默认)将换行符视为单个字符。但在 Windows 上,换行符由两个字节(CRLF 或\r\n)组成。因此,每次读取换行符时,文件位置都会提前 2。

您可以以二进制模式打开文件:

ifstream uploadFile("in.txt", ios::binary);

然后get()将始终一次读取 1 个字节,因此也\r\n字符分开。

于 2020-01-03T19:53:57.767 回答