После того, как текстовый файл прочитан из ifstream для сохранения каждой строки в векторе строк, он должен быть распечатан с использованием цикла for, но он показывает только последнюю строку, когда в конце cout нет новой строки.
Я попробовал два сценария, чтобы распечатать вектор строк:
1) cout << s;
2) cout << s << '\n';
где s - строка вектора, которая повторяет каждый цикл.
1)
показывает только последнюю строку, тогда как 2)
показывает весь текст.
ifstream inFile("sample.txt");
string str;
vector<string> strings;
while (getline(inFile, str))
strings.push_back(str);
for (auto s : strings)
std::cout << s;
Пример текста:
Test File
The quick brown fox jumps over the lazy dog.
cout << s;
только напечатано:
The quick brown fox jumps over the lazy dog.
cout << s << '\n';
напечатано:
Test File
The quick brown fox jumps over the lazy dog.
Я ожидал второго результата при выполнении первого случая.
Как новая строка меняет результат вывода, кроме самой новой строки?
EDITED :
Так как getline()
останавливается при достижении новой строки и также не читает новой строки, cout
без \n
должен был печатать Test FileThe quick brown fox jumps over the lazy dog
, если программа был выполнен на Windows . Потому что ifstream
работает в режиме text , который преобразует \r\n
в \n
.
Однако, поскольку я использую g ++, установленный на Cygwin, это вряд ли произойдет. Вот почему Test File\r\nThe quick brown fox jumps over the lazy dog
показывает только The quick brown fox jumps over the lazy dog
.
Проще говоря, \r
возвращает выходную строку к исходной точке, и текст обрезается до \r
.