как избавиться от пустой строки в с ++? - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь заполнить текстовый документ, но когда я делаю - я получаю пустую первую строку. Мой текстовый документ, с которого я читаю, выглядит так:

3
first fr random 5
second          9
third shazam    2

Я попытался удалить первое значение, и пустая строка исчезла. Так что это коррелирует, но мне нужно это значение.

// My code
ifstream in("U2.txt"); 
ofstream out("U2.txt");
int n;
in>>n;
char vardaiStart[n][21];

in.read(vardaiStart[0], 21);

out << vardaiStart[0]<< endl;

вывод выглядит так:

*blank*
first fr random

но я хочу:

first fr random

Итак, в других проектах я не буду использовать старый C с тех пор, но для этого проекта я выделил этот [endline] и проигнорировал его так: in.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

1 Ответ

0 голосов
/ 18 января 2019

Ваш входной файл выглядит так:

3[endline]
first fr random 5[endline]
second          9[endline]
third shazam    2[endline]

Обратите внимание на добавленные мной [endline]: они могут быть '\n', '\r\n' в зависимости от системы, сгенерировавшей файл.

Ваша первая инструкция:

in >> n;

a отформатирован input read: вы просите прочитать целое число из файла, поэтому будут прочитаны только те символы, которые могут образовывать действительные целые числа.

Это означает, что после этой инструкции оставшаяся часть файла будет:

[endline]
first fr random 5[endline]
second          9[endline]
third shazam    2[endline]

Остальная часть вашего кода читает необработанные байты, поэтому он также будет читать первый [endline] (и печатать его).

Как указано в комментариях, не следует использовать массивы переменной длины , поскольку они не являются частью какого-либо стандарта C ++ (но являются частью стандарта C). Попробуйте вместо этого использовать стандартную библиотеку C ++ .

...