簡體   English   中英

讀寫文件

[英]Reading and writing into files

考慮我的代碼:

#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”的樣子:

23/5/2016
Meteoroloska stanica Bjelave
7,12,16,20,18,13,6
9/11/2014
Mobilno mjerno mjesto Aerodrom, stanica II
-1,3,6,10,8
9/11/2014
Meteoroloska opservatorija Bjelasnica
-5,-2,0,3,1,2,-1,-4

我想做的是從文件“ TEMPERATURE.TXT”中讀取內容,然后將一些信息寫入文件“ IZVJESTAJ.TXT”中,例如最高,最低和平均溫度等。 出於某種奇怪的原因,我的程序在我將最低溫度設置為溫度矢量的第一個溫度的行中崩潰,我也不知道為什么。 歡迎任何幫助。 提前致謝。

在行中

  ulazni_tok>>dan>>c>>mjesec>>c>>godina;

您不是從文本文件中讀取整行。 這意味着下一行:

    getline(ulazni_tok, s);

不會將“ Meteoroloska stanica Bjelave”讀入s,只有上面日期行的其余部分(幾乎是空的)

因此,線

    while(ulazni_tok>>temp)

現在將嘗試將“ Meteoroloska stanica Bjelave”解釋為雙精度型,這將失敗並且在將任何內容插入v中之前,while循環將退出。

隨后,您嘗試訪問不存在的向量中的元素,從而導致崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM