• iostream迭代器操作"txt文本文件"无法写入的思考


    题:从“in.txt”读取数据,然后分奇偶分别存到“out_odd.txt”和“out_even.txt”中

    #include <QCoreApplication>
    #include <iostream>
    #include <fstream>
    #include <iterator>
    #include <vector>
    #include <string>
    #include <stdlib.h>
    using std::cout; using std::endl;
    using std::vector;
    using std::string;
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        std::ifstream ifs("./in.txt");
        std::ofstream ofs_odd("./out_odd.txt",std::ios::out), ofs_even("./out_even.txt",std::ios::out);
        std::istream_iterator<int> in(ifs), in_eof;
        std::ostream_iterator<int> out_odd(ofs_odd, " "), out_even(ofs_even, "
    ");
    
        std::for_each(in, in_eof, [&out_odd, &out_even](const int i) {
               *(i & 0x1 ? out_odd : out_even)++ = i;
               //cout << i;
           });
        return a.exec();
    }
    

    出现了一个很奇怪的现象,文件out_odd.txt”和“out_even.txt”虽然创建了,可是文件是空,测试了一下“in.txt”中的数已经读出来了,为什么会出现这样奇怪的文件呢?我一度怀疑是不是编码方式不对,后来偶然情况下,加入把打开文件关闭的语句,文件神奇的有数据了。

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        std::ifstream ifs("./in.txt");
        std::ofstream ofs_odd("./out_odd.txt",std::ios::out), ofs_even("./out_even.txt",std::ios::out);
        std::istream_iterator<int> in(ifs), in_eof;
        std::ostream_iterator<int> out_odd(ofs_odd, " "), out_even(ofs_even, "
    ");
    
        std::for_each(in, in_eof, [&out_odd, &out_even](const int i) {
               *(i & 0x1 ? out_odd : out_even)++ = i;
               cout << i;
           });
        ofs_odd.close();
        ofs_even.close();
        return a.exec();
    }
    

    为什么会出现这种情况呢?原来文件输出的数据先是放到一个“basic_streambuf()”的地方,并非立马刷新的,当调用file.close()的时候,数据流被刷新到文件中,我们可以直接加入刷新操作,也可以将数据刷新到文件中。

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        std::ifstream ifs("./in.txt");
        std::ofstream ofs_odd("./out_odd.txt",std::ios::out), ofs_even("./out_even.txt",std::ios::out);
        std::istream_iterator<int> in(ifs), in_eof;
        std::ostream_iterator<int> out_odd(ofs_odd, " "), out_even(ofs_even, "
    ");
    
        std::for_each(in, in_eof, [&out_odd, &out_even](const int i) {
               *(i & 0x1 ? out_odd : out_even)++ = i;
               cout << i;
           });
        ofs_odd << std::endl;
        ofs_even << std::endl;
        return a.exec();
    }



  • 相关阅读:
    docker部署mysql Navicat远程连接
    window10安装nginx及请求转发到tomcat服务器访问项目及开机自启
    Keras笔记
    Spectral Clustering 并用silhouette指标值确定最优聚类数目
    Java Swing, paint(), paintComponent(), repaint()
    tensorflow(一):安装在Spyder上
    人工智能入门(七):artificial neural network
    人工智能入门(六):SVM
    人工智能入门(五):data mining的一些算法
    人工智能入门(四):uncertainty&基于统计的学习
  • 原文地址:https://www.cnblogs.com/vczf/p/6823254.html
Copyright © 2020-2023  润新知