2015-09-03 106 views
-2
*EDITED* 

我修正了一些問題,但我仍然把它說錯了。不知何故,當我不多次聲明int GetRand函數時,我得到更多的錯誤消息。運行後不能打印功能

我想作爲最終結果是打印我創建的數組,並打印它的值的最大值和平均值(只計算每個數> -1)。

我調用maxavg()函數錯誤,我得到一個錯誤消息「錯誤」預期標識符或'('之前'{'令牌'在maxavg開始我沒有能夠固定。

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include <limits.h> 

int GetRand(int min, int max); 
int maxavg(); 

int main() 
{ 
int a[21][21], i , j, average, maximum; 


for (i = 0; i < 21; i++) 
{ 
    for (j = 0; j < 21; j++) 
    { 
     a[i][j] = GetRand(0, 100); 

     printf("%3d" , a[i][j]); 
    } 

     a[2][15] = -1; 
     a[10][6] = -1; 
     a[13][5] = -1; 
     a[15][17] = -1; 
     a[17][17] = -1; 
     a[19][6] = -1; 

    printf("\n"); 

} 


average = maxavg(); 
maximum = maxavg(); 


printf("average = %d \n maximum = %d", average, maximum); 




return 0; 

} 



// random seed 
int GetRand(int min, int max); 
int get() 
{ 
int i, r; 
for (i = 0; i < 21; i++) 
{ 
    r = GetRand(0, 100); 
    printf("Your number is %d \n", r); 
} 
return(0); 
} 

int GetRand(int min, int max) 
{ 
static int Init = 0; 
int rc;    

if (Init == 0) 
{ 
    srand(time(NULL)); 
    Init = 1; 
} 

rc = (rand() % (max - min +1) +min); 

return (rc); 
} 




// max and average 

int maxavg(); 
{ 

int max=INT_MIN, sum=0, count=0, avg, n, m, current; 

current = a[i][j]; 
avg = sum/count; 

for(n = 0; n < 21; n++){ 
    for(m =0; m < 21; m++){ 
     if(current > -1){ 
      sum = sum + current; 
      count = count + 1; 
      if(current > max){ 
       max = current; 
      } 
     } 

    } 
} 


return(0); 

} 
+4

您已經創建了一個用於計算數組統計量的函數,但是您永遠不會調用它,所以它不會打印任何內容。順便說一下,該功能已被打破,但這是一個單獨的問題。 –

+1

'current'從未設置 – chux

+1

爲什麼每次通過循環設置'a [2] [15]'等等?如果您想用這些值替換隨機數,請在循環後執行。 – Barmar

回答

0

此程序將只從GetRand打印陣列a的元素在for循環中main,除了,沒有其他的函數被調用,因此getmaxavg從不執行,儘管被定義。所以是的,你應該首先從main中調用它,如果你想看看它有什麼作用的話。

雖然你的maxavg函數的邏輯也有一個很大的問題。 您認爲要迭代的數組在哪裏?您尚未將任何參數傳遞給maxavg(也未聲明並設置局部變量)。它看起來像你期望current包含這些數組元素值,但現實是你從來沒有把這個變量的值設置爲任何值。您應該使用ij變量作爲您應該添加的數組的索引,如arr[i][j]

其他一些注意事項:

  • 你真的應該被設置a[2][15]a[10][6]等循環完成之後,而不是在每一個迭代。
  • 您聲明瞭GetRand兩次。
  • maxavg返回一個int,但函數中沒有return語句(「控制到達非void函數結束」)。
+0

你的意思是主要的,然後是功能本身?當我在maxavg之前刪除「int」時,我以某種方式得到了更多的錯誤信息。 – Mimic01

+0

函數定義的語法是'return_type function_name(param_type param_name,...){/ * function body * /}'。如果該函數沒有返回任何東西,那麼它的返回類型是'void'。 – MC93