我是新手,这只是我第二学期的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;
}
答案 0 :(得分:5)
在loTemp()
中,您错误地使用了deg[7]
。 deg[7] = deg[size];
会覆盖不属于你的内存。您有7个项目,索引从0到6.为此目的使用额外的变量...例如为此目的声明的lo
。另外,请勿阅读deg[7]
。
此外,请注意,在hiTemp()
中,您丢失了数组的第一个值,因为您使用deg[0]
作为辅助变量。使用为此目的声明的hi
。
同样的问题hiTemp()
,访问elments 0
到size
,即访问size+1
元素,如果数组已被声明拥有,则无法正常只有size
个元素。
同样的问题avgTemp
...你再次从界限中获取一个额外的字节。