我对此并不陌生,这只是我第二学期的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()来说,访问元素0size也就是访问size+1元素,如果声明数组仅包含size元素,则不可能。

对于avgTemp也是同样的问题...您再次超出了访问范围的一个额外字节。

关于c - 函数在一种特定情况下未返回期望值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25567292/

10-12 19:20