почему пустая строка занимает два байта? - PullRequest
4 голосов
/ 12 апреля 2020

Я новичок в C ++. Я хотел бы сосчитать пустые строки в конце текстового файла. Но теперь я сталкиваюсь с проблемой. Содержимое текстового файла выглядит следующим образом:

test.txt

1
2
blank line

Код:

#include <iostream>
#include <fstream>

using namespace std;

int main()
{
    ifstream inFile("test.txt",ios::in);
    if (!inFile.good())
    {
        cout << "error" << endl;
    }

    inFile.clear();
    inFile.seekg(-1, ios::end);
    char a;
    inFile.get(a);
    cout << "symbol for a: " << a << "ASCII: " << (int)a << endl;

    inFile.clear();
    inFile.seekg(-2, ios::end);
    char b;
    inFile.get(b);
    cout << "symbol for b: " << b << "ASCII: " << (int)b << endl;
}

Результат:

symbol for a: // a stands for the last character which is '\n'
ASCII: 10
symbol for b: // b stands for the second last character, which should be "2"
ASCII: 10

В результате, показанном выше, значение b также равно \n. Почему?

1 Ответ

4 голосов
/ 12 апреля 2020

В Windows, новая строка генерирует два символа ascii "\ r \ n" (возврат каретки, перевод строки) [10,13] Откройте любой исходный код в шестнадцатеричном редакторе, и вы увидите два символа в конце каждая строка.

...