首先,感谢您帮助我。我不是C ++的专家,但我在C中做了一些工作。我的代码问题是它不能正确显示返回的数组值。
一般来说,我的程序尝试做的是评估函数F(x),以表格格式显示它并找到它的最小值和最大值。我已经找到了做所有这些的方法,但是当我想显示数组F(x)的返回值时,它以某种方式被扭曲。第一个值总是正确的,例如像
cout << *(value+0) <<endl;
但是下一个值与假设的f(x)不同。如果我的代码达不到正确的标准,请事先提前结束,但我现在已经把头脑包裹了一段时间了。
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
#include <string>
#include <stdlib.h>
using namespace std;
float *evaluate ();
void display ();
void Min_Max(float *);
int main()
{
float *p;
evaluate();
display();
cin.get();
p = evaluate();
Min_Max(p);
return 0;
}
float *evaluate()
{
ofstream Out_File("result.txt");
int n=30;
float x [n];
float fx[n];
float interval = ((4-(-2))/0.2);
x[0]= -2.0;
for(n=0;n <= interval;n++)
{
fx[n] = 4*exp((-x[n])/2)*sin((2*x[n]- 0.3)*3.14159/180);
x[n+1] = x[n] + 0.2;
if (Out_File.is_open())
{
Out_File <<setprecision(5)<<setw(8)<<showpoint<<fixed<< x[n];
Out_File << "\t\t"<<setprecision(5)<<setw(8)<<showpoint<<fixed<<fx[n]<<endl;
}
else cout << "Unable to open file";
}
Out_File.close();
return fx;
}
void display()
{
ifstream inFile;
inFile.open("result.txt");
string line;
cout << " x\t\t\t f(x)"<<endl;
cout << "_______________________________________"<<endl;
while( getline (inFile,line))
{
cout<<line<<endl;
}
inFile.close();
}
void Min_Max(float *value)
{
int a=0;
for(a=0;a<=30;a++){
cout << *(value+a) <<endl;
*value =0;}
}
答案 0 :(得分:1)
我知道,您已将p
传递给您的函数Min_Max
。其中p
是指向数组入口点的指针。该数组在另一个函数local variable
中创建为evaluate
。这不起作用,因为只要evaluate
完成,它的所有local variables
(例如fx
数组)都会被销毁,而你返回的指针则指向“无”。
在这种情况下,您可以使用heap
内存(使用new
运算符)来分配fx
。但是不要忘记随后将其释放。
另外,请查看here