C の関数に配列を渡す際に問題があります。メインで配列を宣言しています。
そして、関数内に入力します。
その時点で、関数を離れ、プロトタイプを使用して配列を別の関数に渡します
そして、配列へのアクセスを試みます。
ただし、配列にデータを入力した最初の関数を終了すると、配列にアクセスできなくなります。0.00000 と nan の値を返すだけです。
void ReadData(FILE *fpIn, int lines, double *pA );
void MinMaxAvg(double *pA, double *min, double *max, double *avg, int lines);
int main()
{
FILE *fpIn = NULL;
int lines = 0;
double *pA = NULL;
ReadData(fpIn, lines, pA);
double min = 0;
double max = 0;
double avg = 0;
MinMaxAvg(pA, &min, &max, &avg, lines);
printf("%lf %s %lf %s %lf \n", avg, " ", min, " ", max);
return 0;
}
void ReadData(FILE *fpIn, int lines, double *pA )
{
char fName[20];
scanf( "%s", fName);
fpIn = fopen ( fName, "rt");
// fpIn = fopen( "test1.txt", "rt");
if ( fpIn == NULL)
{
printf( "Unable to open: ");
exit(99);
}
//Gets Lines
//int lines=0;
char ch;
while((ch=fgetc(fpIn))!=EOF)
{
if (ch=='\n') { lines++; }
}
// clearerr(fName *fpIn);
fclose(fpIn);
fopen(fName, "rt");
//Makes Array
//double *pA;
pA = (double *)malloc(lines*sizeof(double));
//Fills Array
for (int i=0; i<lines; i++)
{
fscanf(fpIn, "%lf", &pA[i]);
}
for (int i=0; i<lines; i++)
{
printf("%lf \n", pA[i]);
}
}
void MinMaxAvg(double *pA, double *min, double *max, double *avg, int lines)
{
double total = 0;
for (int i=0; i<lines; i++)
{
if ( i==0)
{
*min = pA[0];
*max = pA[0];
}
else
{
if (pA[i] < *min)
{
*min = pA[i];
}
if (pA[i] > *max)
{
*max = pA[i];
}
}
total += pA[i];
}
*avg = (total / (double)lines);
}
助言がありますか?
ありがとう!