c++primer第五版练习17.39
按照书中内容编写的代码不正确,首先是缺少fstream::app标识符,不加这个只能在最后一行添加一个数字。
其次,在vsstdio上和cfree上相同程序运行结果不同,可能由于seek定位不准确,在windows下每行结尾是回车+换行,linux下只有换行,
估计vsstdio中也只有换行没有回车。
#include <iostream> #include <fstream> #include <string> using namespace std; int main() { fstream Inout("Text.txt", fstream::ate | fstream::in | fstream::out | fstream::app);//fstream::ate | if (!Inout.is_open()) { cerr << "open failed" << endl; return -1; } string line; auto end_mark = Inout.tellg(); Inout.seekg(0, fstream::beg); size_t cnt(0); while (Inout.tellg() != end_mark && getline(Inout, line)) { cnt += line.size() + 1;//计数 auto mark = Inout.tellg(); Inout.seekp(end_mark);//重定位到文件尾 Inout << cnt; if (mark != end_mark) { Inout << " "; } Inout.seekp(mark); } //while (getline(Inout, line)) //{ // cout << line << endl; //} system("pause"); return 0; }