函数未返回特定情况的预期值

时间:2014-08-29 11:23:10

标签: c

我是新手,这只是我第二学期的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;
}

1 个答案:

答案 0 :(得分:5)

loTemp()中,您错误地使用了deg[7]deg[7] = deg[size];会覆盖不属于你的内存。您有7个项目,索引从0到6.为此目的使用额外的变量...例如为此目的声明的lo。另外,请勿阅读deg[7]

此外,请注意,在hiTemp()中,您丢失了数组的第一个值,因为您使用deg[0]作为辅助变量。使用为此目的声明的hi

同样的问题hiTemp(),访问elments 0size,即访问size+1元素,如果数组已被声明拥有,则无法正常只有size个元素。

同样的问题avgTemp ...你再次从界限中获取一个额外的字节。