Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 读写文件_C++_File - Fatal编程技术网

C++ 读写文件

C++ 读写文件,c++,file,C++,File,以我的代码为例: #include <iostream> #include <fstream> #include <iomanip> #include <string> #include <vector> #include <string> #include <algorithm> using namespace std; struct Mjerenje { int dan, mjesec, godi

以我的代码为例:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;

struct Mjerenje
{
    int dan, mjesec, godina;
    string s;
    vector<double> v;
    double prosjek;
    double minimalna;
    double maximalna;
};

int main ()
{
    ifstream ulazni_tok("TEMPERATURE.TXT");
    if(!ulazni_tok) cout<<"Datoteka TEMPERATURE.TXT ne postoji!\n";
    vector<Mjerenje> Mjerenja;
    for(;;)
    {
        int dan, mjesec, godina;
        double temp;
        char c;
        string s;
        vector<double> v;
        ulazni_tok>>dan>>c>>mjesec>>c>>godina;
        getline(ulazni_tok, s);
        while(ulazni_tok>>temp)
        {
        v.push_back(temp);
        ulazni_tok>>c;
        if(c!=',') break;
        }
        ulazni_tok.clear();
        double prosjek(0);
        double minimalna=v[0]; //My program crashes here
        double maximalna=v[0];
        for(int i=0; i<v.size(); i++)
        {
            if(v[i]<minimalna)
                minimalna=v[i];
            if(v[i]>maximalna)
                maximalna=v[i];
            prosjek+=v[i];
        }
        prosjek/=v.size();
        Mjerenja.push_back({dan, mjesec, godina, s, v, prosjek, minimalna, maximalna});
        sort(Mjerenja.begin(), Mjerenja.end(), [](Mjerenje a, Mjerenje b){if(a.godina<b.godina)return true; else if(a.godina==b.godina && a.mjesec<b.mjesec)return true; else if(a.godina==b.godina && a.mjesec==b.mjesec && a.dan<b.dan)return true; else if(a.godina==b.godina && a.mjesec==b.mjesec && a.dan==b.dan && a.prosjek<b.prosjek)return true; else return false;});
        if(!ulazni_tok) break;
    }
    if(ulazni_tok.bad()) cout<<"Problem pri citanju datoteke TEMPERATURE.TXT\n";
    ofstream izlazni_tok("IZVJESTAJ.TXT");
    for(int i=0; i<Mjerenja.size(); i++)
    {
        izlazni_tok<<Mjerenja[i].s<<endl;
        for(int j=0; j<Mjerenja[i].s.size(); j++)
            izlazni_tok<<"-";
        izlazni_tok<<"Datum mjerenja: "<<Mjerenja[i].dan<<"/"<<Mjerenja[i].mjesec<<"/"<<Mjerenja[i].godina<<endl;
        izlazni_tok<<"Minimalna temperatura: "<<Mjerenja[i].minimalna<<endl;
        izlazni_tok<<"Maksimalna temperatura: "<<Mjerenja[i].maximalna<<endl;
        izlazni_tok<<"Prosjecna temperatura: "<<Mjerenja[i].prosjek<<endl;
        izlazni_tok<<endl;
    }
    izlazni_tok.flush();
    return 0;
}
我想做的是读取文件“TEMPERATURE.TXT”,然后将一些信息写入文件“IZVJESTAJ.TXT”,比如最高、最低和平均温度等等。出于某种奇怪的原因,我的程序在我将最低温度设置为温度向量的第一个温度时崩溃了,我不知道为什么。欢迎任何帮助。提前谢谢。

排队

  ulazni_tok>>dan>>c>>mjesec>>c>>godina;
您没有从文本文件中读取整行内容。这意味着后续行:

    getline(ulazni_tok, s);
不将“Meteololoska stanica Bjelave”读入s,只读入上面日期行的剩余部分(wich几乎为空)

因此,该行

    while(ulazni_tok>>temp)
现在将尝试将“Meteololoska stanica Bjelave”解释为一个double,它将失败,while循环将在任何东西插入v之前退出


随后,您试图访问向量中不存在的元素,从而导致崩溃。

我修复了这个问题,我只是添加了:if(v.size()>0){minimalna=v[0];maximalna=v[0];}但现在我的程序在我生成结构Mjerenja的行中崩溃。“真奇怪,是吗?”维托说。第41行(或其附近),内容为ulazni_tok.clear();。那不应该是乌拉兹尼吗;相反至少这使程序写入输出并正确终止。
    while(ulazni_tok>>temp)