gpt4 book ai didi

c++ - Segmentation fault (core dumped) 错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:20:49 26 4
gpt4 key购买 nike

我的程序编译正常,但在输入文件时出现“段错误(核心转储)”错误。我没有正确处理 ostream 吗?

#include <std_lib_facilities.h>

struct Reading {
int hour;
double temperature;
Reading(int h, double t): hour(h), temperature(t) { }
bool operator<(const Reading &r) const;
};

bool Reading::operator<(const Reading &r) const
{
// stub version

if (temperature < r.temperature){

return true;

}
else if (r.temperature < temperature) {

return false;
}


}

/*
* function declarations
*/

ostream& operator<<(ostream& ost, const Reading &r);

vector<Reading> get_temps();

double check_adjust_temp(double temperature, char scale);

double c_to_f(double temperature);

double mean(vector<Reading> temps);

double median(vector<Reading> temps);

void print_results(const vector<Reading>& temps, double mean_temp,
double median_temp);

int main()
try
{
vector<Reading> temps = get_temps();
if (temps.size() == 0) error("no temperatures given!");
double mean_temp = mean(temps);
sort(temps.begin(), temps.end());
double median_temp = median(temps);
print_results(temps, mean_temp, median_temp);
}
catch (exception& e) {
cerr << "error: " << e.what() << '\n';
return 1;
}
catch (...) {
cerr << "Oops: unknown exception!\n";
return 2;
}

/*
* function definitions
*/

ostream& operator<<(ostream& ost, const Reading &r)
{

return ost << '(' << r.hour
<< ',' << r.temperature <<')';
}

vector<Reading> get_temps()
{
cout << "Please enter name of input file name: ";
string name;;
cin >> name;
ifstream ist(name.c_str());
if(!ist) error("can't open input file ", name);

vector<Reading> temps;
int hour;
double temperature;
while (ist >> hour >> temperature){
if (hour <0 || 23 <hour) error("hour out of range");
temps.push_back( Reading(hour,temperature));
}

}

double check_adjust_temp(double temperature, char scale)
{
if (scale == 'c' || 'C'){

return c_to_f(temperature);
}
else if (scale == 'f' || 'F') {

return temperature;
}
else {

error("Wrong input type");
}
}

double c_to_f(double temperature)
{
double c;
c = ((temperature * (9.0/5)) + 32);
return (c);
}

double mean(vector<Reading> temps)
{
double mean_temp;
double sum = 0;
for (int i = 0; i< temps.size(); ++i) sum += temps[i].temperature;
mean_temp = sum/temps.size();
return (mean_temp);
}

double median(vector<Reading> temps)
{
double median_temp;
sort (temps.begin(), temps.end());
median_temp = temps[temps.size()/2].temperature;
return (median_temp);
}

void print_results(const vector<Reading>& temps, double mean_temp,
double median_temp)
{

cout << "The sorted temperatures are:\n";
cout << get_temps;
cout << "The mean temperature is " << mean_temp << ".\n";
cout << "The median temperature is " << median_temp << ".\n";
}

最佳答案

scale == 'c' || 'C'

并没有按照您的想法行事。它像这样解析:

( scale == 'c' ) || 'C'

'C' 始终为真。如果您启用了编译器警告,您应该已经注意到这一点。

(不,这不是您的直接问题;它在 get_temps 的末尾出现。但是启用警告后,您也会看到。)

关于c++ - Segmentation fault (core dumped) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4363133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com