我目前正在为c ++进行赋值,其中我从.txt文件中获取值并将这些数字取平均值,然后将该平均值写入新的.txt文件中 我做了所有这些,并调用了main.cpp中的函数,但是没有返回平均值,而且我不知道如何解决此问题。有人能帮我吗?
代码如下: computeaverage.cpp
#include <fstream>
#include <iostream>
#include "computeaverage.hpp"
using namespace std;
double compute_average(double average) {
double total = 0, count = 0;
int value;
ifstream inFile;
inFile.open("data.txt");
while (inFile >> value) {
count++;
total += value;
}
inFile.close();
average = total/count;
return average;
}
double write_avg_to_file(double average) {
ofstream outFile;
outFile.open("solution.txt");
outFile << average;
outFile.close();
}
computeraverage.hpp
double compute_average(double average);
double write_avg_to_file(double average);
main.cpp
#include <iostream>
#include "computeaverage.hpp"
using namespace std;
int main() {
double average = 0;
compute_average(average);
cout << "The average is " << average << endl;
write_avg_to_file(average);
return 0;
}
感谢您的帮助
答案 0 :(得分:2)
compute_average
按值取average
,并且average
从未分配给主函数(除0初始化外)。像这样使用它:
double average = compute_average();
并删除compute_average
的参数,该参数无论如何都不会使用。
答案 1 :(得分:2)
通过引用传递import React,{Component} from 'react';
import MetricsReport from '../components/pages/metrics-report';
class MetricsReportContainer extends Component {
constructor(props) {
super(props)
this.generateReport = this.generateReport.bind(this);
}
generateReport(metricsParam) {
console.log('???:', metricsParam);
}
componentDidMount() {
}
render() {
return(
<div>
<MetricsReport generateReport={this.generateReport}/>
</div>
)
}
}
export default metricsReportContainer;
,从average
函数返回后,其值将存在:
在computeraverage.hpp中替换
compute_average
与
double compute_average(double average);
在computeaverage.cpp中替换
void compute_average(double& average);
与
double compute_average(double average) {
并删除
void compute_average(double& average) {
答案 2 :(得分:0)
欢迎来到C ++编程世界。我看到您接受了Emil的回答,但正如zett42所建议的那样,可能会有更好的方法。
从函数的参数中返回结果是一种强大的技术,如果您通过C API维护或与C代码,旧版C ++或其他语言接口,则必须使用该技术。该技术确实存在陷阱,应尽可能避免。最好的方法是利用工具的功能。如果您使用的是最新的编译器,并且添加了发出所有警告的选项,并将警告视为错误;对于g ++“ -Wall -Werror”,编译器将提供一些帮助。有时(如上面讨论的那样)您需要禁用这些功能,但是可以肯定的是,在学习或工作时,报告会有所帮助。如果使用这些选项构建代码,则会收到以下消息:
computeaverage.cpp: In function double write_avg_to_file(double):
computeaverage.cpp:33:1: error: no return statement in function returning non-void [-Werror=return-type]
将write_avg_to_file
的声明更改为void write_avg_to_file(double);
会使这些消息静音。
此外,如果您使用的是C ++ 17,则可以声明带有nodiscard属性的返回值的函数(如果您使用的不是C ++ 17,则可以通过其他一些不太方便的方式来指定):
[[nodiscard]] double compute_average(double average);
将提供以下诊断:
main.cpp: In function int main():
main.cpp:7:20: error: ignoring return value of double compute_average(double), declared with attribute nodiscard [-Werror=unused-result]
compute_average(average);
将有问题的行更改为average = compute_average(average);
将使这些消息静音,程序将按预期运行。但是,无需将average
传递到compute_average
中,因此可以将文件重写为:
computeaverage.hpp
[[nodiscard]] double compute_average();
void write_avg_to_file(double average);
computeaverage.cpp
#include <fstream>
#include <iostream>
#include "computeaverage.hpp"
using namespace std;
double compute_average() {
double total = 0, count = 0;
int value;
ifstream inFile;
inFile.open("data.txt");
while (inFile >> value) {
count++;
total += value;
}
inFile.close();
double average = total/count;
return average;
}
void write_avg_to_file(double average) {
ofstream outFile;
outFile.open("solution.txt");
outFile << average;
outFile.close();
}
main.cpp
#include <iostream>
#include "computeaverage.hpp"
using namespace std;
int main() {
double average = 0;
average = compute_average();
cout << "The average is " << average << endl;
write_avg_to_file(average);
return 0;
}
当然,您仍然可以进行错误检查,但是希望这些建议对您或其他人在将来的项目中有所帮助。