我对此并不陌生,这只是我第二学期的C。代码可以很好地编译。它可以完成大部分的工作。由于某些原因,当temp[]
数组中的最小值位于第一个元素中时,min
函数将返回零。实际上,变量(lo
)设置为0。函数hiTemp
没有相同的问题,但是几乎是相同的代码,只是符号更改。
#include <stdio.h>
//prototype functions
float avgTemp(float deg[], int size);
float hiTemp(float deg[], int size);
float loTemp(float deg[], int size);
//main
void main(void)
{
char* day[] = {"first", "second", "third", "fourth", "fifth", "sixth", "seventh"};
float temp[7] = {0};
int i = 0;
float avg = 0;
float hi = 0;
float lo = 0;
//Do/while loop to collect the temps for the days of the week
do
{
printf("Enter the temp for the %s day:", day[i]);
scanf("%f", &temp[i]);
i++;
}
while(i <= 6);
//math and print for the average temp
avg = avgTemp(temp, 7);
hi = hiTemp(temp, 7);
lo = loTemp(temp, 7);
printf("The high temp was %.2f\n", hi);
printf("The low temp was %.2f\n", lo);
printf("The average temp is %.2f\n", avg);
if(hi > 113)
puts("The high temperature is out of range");
if(lo < -4)
puts("The low temperature is out of range");
}
//function to find the average
float avgTemp(float deg[], int size)
{
float add = 0;
for(size; size >= 0; size--)
add = add + deg[size];
return add / 7;
}
//function to find the hi temp
float hiTemp(float deg[], int size)
{
float hi = 0;
int i = 1;
for(i = 1; i <= size; i++)
{
if(deg[0] <= deg[i])
deg[0] = deg[i];
}
hi = deg[0];
return hi;
}
//function to find the lo temp
float loTemp(float deg[], int size)
{
float lo = 0;
for(size; size > 0; size--)
{
if(deg[size] <= deg[7])
deg[7] = deg[size];
}
lo = deg[7];
printf("debug lo:%f\n",lo);
return lo;
}
最佳答案
在loTemp()
中,您错误地使用了deg[7]
。 deg[7] = deg[size];
覆盖不是您的内存。您有7个项目,索引从0到6。为此目的使用一个额外的变量...例如为此目的而声明的lo
。另外,请勿读取deg[7]
。
另外,请注意在hiTemp()
中,由于使用deg[0]
作为辅助变量,因此会丢失数组的第一个值。使用为此目的而声明的hi
。
同样,对于hiTemp()
来说,访问元素0
到size
也就是访问size+1
元素,如果声明数组仅包含size
元素,则不可能。
对于avgTemp
也是同样的问题...您再次超出了访问范围的一个额外字节。
关于c - 函数在一种特定情况下未返回期望值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25567292/