我已經寫了一個課程,並且遇到問題。該程序的目的是將一組值讀入數組,計算平均值,然後查找該數組中有多少元素大於該平均值。函數原型被提供,所以不能被改變。此外,我們被指示將數組初始化爲10,並且每當讀取元素的數量超過當前大小時將其大小加倍,因此無法更改。
我遇到的問題是從aboveaverage函數返回一個值。它在它自己內部正常工作(我可以在返回前將printf顯示計數,但在主函數中,返回的值是0。是否有人可以幫助解決此問題?令人沮喪
此外,該評論的printf線是檢查由該函數返回的值。我評論它,而不是刪除它,所以我不會每次都重新鍵入。C函數不返回值
#include <stdio.h>
#include <stdlib.h>
double average(double *ptr, int size);
int aboveaverage(double *ptr, int size, double average);
int main(int argc, char* argv[])
{
double *ptr, avg, above, temp;
int size = 10, i, j;
void *tmp;
FILE *fp;
avg = above = 0;
if (argc != 2)
{
printf("Invalid number of arguments, 2 required\n");
return 1;
}
fp = fopen(argv[1], "r");
ptr = (double *)calloc(10, sizeof(double));
printf("Allocated 10 doubles\n");
for (i = 0;fscanf(fp, "%lf", &temp) != EOF; i++)
{
if (i >= size - 1)
{
size*=2;
tmp = realloc(ptr, size);
if (tmp == NULL)
{
printf("Error with realloc, exiting\n");
return 1;
}
printf("Reallocated to %d doubles\n", size);
}
ptr[i] = temp;
j = i;
}
size = j + 1;
avg = average(ptr, size);
above = aboveaverage(ptr, size, avg);
//printf("%d\n", above);
printf("%d elements are above average of %lf\n", above, avg);
free(ptr);
return 0;
}
double average(double *ptr, int size)
{
double sum;
int i;
while (i < size)
{
sum+=ptr[i];
i++;
}
return (sum/size);
}
int aboveaverage(double *ptr, int size, double avg)
{
int count=0, temp;
for (int i = 0; i < size; i++)
{
temp = (int)ptr[i];
if (temp > avg)
count++;
}
return count;
}
這對你的問題沒有幫助,但你的代碼是好的,如果你閱讀'realloc()'的文檔,你可以簡化這個代碼。另外,你不需要傳遞'malloc()'或'realloc()'的返回值。 –
'above'應該是'int'。或者只是將'%d元素'更改爲'%f元素',但我推薦前者,因爲當函數返回int時,爲什麼'above'是'double'。 –
在函數'average'中,'i'沒有被初始化。善良只知道你在訪問什麼。 –