Обновление 13 ноября 2012 г. Я обнаружил, что мой вопрос уже задан. Вот хорошее решение для обработки различных текстовых файлов с окончанием строки: std :: ifstream для обработки LF, CR и CRLF?
Можно ли внести свой вклад в libstdС++? Как?
2012/11/11
Я обнаружил, что что-то не так с cout.
Если есть две строки, возвращенные из getline(),
вторая строка перезапишет первую в выходных данных.
Это пример кода:
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
//normal code
cout << "Normal result:" << endl;
string str1 = "hello";
cout << str1;
str1 = "123";
cout << str1;
cout << endl;
//broken code
cout << "Bug?" << endl;
ifstream fin;
fin.open("test.dat");
string str;
getline(fin, str);
cout << str;
getline(fin, str);
cout << str;
fin.close();
return 0;
}
А вот входной файл (test.dat):
hello
123
Вывод будет:
Normal result:
hello123
Bug?
123lo
Я использую Ubuntu 12.10 64-бит,
и версия компилятора g++ (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2.
Есть совет? Кто-нибудь подскажет, куда написать ошибку?