考虑一下我的代码:
#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”中,比如最高、最低和平均温度等等。由于一些奇怪的原因,我的程序崩溃在线上,我把我的最低温度设定在我的温度向量的第一个温度,我不知道为什么。欢迎任何帮助。提前谢谢。
发布于 2018-06-17 11:54:24
排在队伍里
ulazni_tok>>dan>>c>>mjesec>>c>>godina;您没有从文本文件中读取整行。这意味着后面的一行:
getline(ulazni_tok, s);不将"Meteoroloska stanica Bjelave“读入s中,只有上面日期行的其余部分(wich几乎是空的)。
因此,线
while(ulazni_tok>>temp)现在将尝试将"Meteoroloska Bjelave“解释为”double“,它将失败,并且will循环将在任何内容插入到v中之前退出。
随后,您将尝试访问向量中不存在的元素,从而导致崩溃。
https://stackoverflow.com/questions/50894667
复制相似问题