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;
}

 

posted @ 2022-05-22 20:05  菠萝超级酸  阅读(34)  评论(0编辑  收藏  举报