我正在进行一项新工作,我一直在崩溃,但我没有收到任何错误它只是崩溃了。我创建了2个函数来尝试计算max,min和avg以及1来生成3个随机数并将其发送回main。我的函数中的所有值都需要作为指针返回。感谢先进的帮助!
int * random_number()
{
static int num[3];
for(int i = 0; i < 3; i++){
num[i] = (10 + rand() % 90);
}
return num;
}
int * calculate(int *value)
{
static int ans[3];
int max = 0;
for (int i = 0; i < 3; i++)
{
ans[0] += value[i];
ans[0] = ans[0] / i;
if (value[i] > max)
{
ans[2] = max;
}
int min = value[0];
if (value[i] < min)
{
ans[3] = min;
}
}
return ans;
}
int main() {
srand(time(NULL));
int cnt = 0;
int *result;
int *find;
do{
result = random_number();
find = calculate(result);
cnt++;
}
while(cnt < 10);
if (cnt == 10){
printf("Result is %i, %i, %i.", result[0],result[1],result[2]);
printf("The avg is %i. The max is %i and the min is %i.", find[0], find[1], find[2]);
printf("Worked \n");
}
else
printf("Didn't work");
return 0;
}
答案 0 :(得分:1)
你的calculate()
函数有很多错误 - 主要是你试图在for
循环中做一些应该在它之外完成的事情。你得到的崩溃来自以下几行:
ans[0] = ans[0] / i;
...第一次循环传递时i
为零(所以你除以零)。在添加了所有值之后,在循环之后实际上应该完成该分割(并且总是除以3)。
该行:
int min = value[0];
也应该在循环之前移动;事实上,你是在每次循环传递时重置min
的值,所以你实际上最终得到的 last 值小于value[0]
,如果有的话是一个......如果没有,你就不会改变ans[3]
。 ans[3]
实际上应该是ans[2]
... ans[3]
超出范围(将是第4个元素)。