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

Я исправил некоторые проблемы, но я все еще нахожу это неправильно. Как-то, когда я не объявляю с int функцией GetRand более одного раза, я получаю больше сообщений об ошибках.Функция не печатается после запуска

То, что я хочу в качестве конечного результата, - это напечатать массив, который я создал, а также распечатать максимальные и средние значения его (только считая каждое число> -1).

Я вызываю функцию maxavg() неправильно, и я получаю сообщение об ошибке «Ошибка» ожидаемого идентификатора или '(' before '{' токен "в начале 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' never set – chux

+1

Почему вы устанавливаете' a [2] [15] 'и т. Д. Каждый раз через цикл? Если вы хотите заменить случайное число на эти значения, сделайте это после цикла. – Barmar

ответ

0

Эта программа будет печатать только элементы массива a в для петли в main. Помимо GetRand, никакая другая функция не вызывается, так get и maxavg никогда не выполняются, несмотря на определенные. Так что да, вы должны в первую очередь назвать это от main, если хотите посмотреть, что он делает.

Существует также большая проблема с логикой вашей функции maxavg. Где находится массив, который вы предполагаете перебирать? Вы не передали какой-либо параметр maxavg (а не объявили и не установили локальную переменную). Похоже, вы ожидаете, что current будет содержать эти значения элементов массива, но в действительности вы никогда не устанавливали значение этой переменной ни на что. Вы должны использовать переменные i и j в качестве индексов в массив, который вы должны добавить, как в arr[i][j].

Несколько другие ноты:

  • Вы действительно должны быть настройки a[2][15], a[10][6] и так далее после того, как цикл закончен, не в каждой итерации.
  • Вы объявили GetRand дважды.
  • maxavg возвращает int, но в вашей функции нет инструкции return («управление достигает конца не-пустоты»).
+0

Вы имеете в виду перед главной, а затем и функцию? Когда я удаляю «int» перед maxavg, я получаю больше сообщений об ошибках. – Mimic01

+0

Синтаксис определения функции - это 'return_type function_name (param_type param_name, ...) {/ * function body * /}'. Если функция ничего не возвращает, то ее возвращаемый тип «void». – MC93

Смежные вопросы