2014-08-29 73 views
-1

我是新來的,這只是我的第二個學期的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

爲什麼'loTemp'中的硬編碼幻數'7'? – alk 2014-08-29 11:32:17

+1

@Downvoter:如果沒有明確的理由,請不要低估。不要阻止那些只是在學習stackoverflow和C時,他們有一個有效的問題。 – fritzone 2014-08-29 11:35:52

+1

您可能會喜歡使用調試器來調試代碼:http://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – alk 2014-08-29 11:37:19

回答

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也是同樣的問題......你再次訪問一個額外的字節超出你的範圍。

+1

對hiTemp()或多或少有相同的問題,訪問元素'0'到'size',即訪問'size + 1'元素,如果數組已被聲明爲只有'size'元素。 – alk 2014-08-29 11:40:32

+0

@alk正確觀察。修改答案(即:複製你的評論:) :)但讓我們承認它...我們都是在某個階段的初學者:)在那些日子裏沒有一個計算器。 – fritzone 2014-08-29 11:42:35

+0

'avgTemp'也是這樣做的錯誤。 – alk 2014-08-29 11:46:25