2014-12-17 3 views
-2

Я пытаюсь написать функцию, которая находит наибольшее значение в массиве 2d с строкой 4 и col из 4, где 2d-массив заполняется пользовательским вводом. Я знаю, что моя основная ошибка связана с массивом в функции, но я не уверен, что это такое.C программирование: функции с массивами

Было бы очень полезно, если бы кто-то мог найти, где я ошибся, а не писать новый код. Если только я не отправился на юг.

Моя попытка:

#include <stdio.h> 

void largest(int array); 

int main() { 
    int x,y,trash; 
    int array[4][4]; 
    int row = 4; 
    int col = 4; 
    int bigNum,greater; 
    bigNum=largest(array); 
    printf("Please enter a value: ") 

    for(x=0;x<row;x++) { 
     for(y=0;y<(col);y++) { 
      scanf("%d",&array[x][y]); 
      scanf("%d",&trash); 
     } 
    } 

    printf("The largest number in the array is : ",bigNum); 
} 

void largest(int array[][]) { 
    for(x=0; x<row; x++) { 
     for(y=0; y<(col-1); y++) { 
      if (array[x][y] > array[x][y+1]) { 
       array[x][y+1] = array[x][y]; 
      } 
     } 
     printf("\n")  
    } 
    big = array[x][y]; 
    return big; 
} 
+0

Ваша 'самая большая' функция' void' как она может вернуть значение? – Himanshu

+1

Объявление funtion 'void most (int array);' неверно. здесь аргумент функции - это только переменная 'int', а не' array'. – Himanshu

+0

Пожалуйста, разместите только код, который компилируется без предупреждений с помощью '-Wall'. Компилятор поможет вам. –

ответ

0

массив не инициализирован, и вы делаете это

bigNum=largest(array); 

Вы должны найти самый большой, когда у вас есть элементы в массиве.

Есть много других ошибок в этом коде:

  1. Самая большая функция не является правильной и она возвращается недействительным
  2. Вы не можете иметь массив [] [] в качестве параметра, и оно должно быть массив [] [4].

OMG Когда я прошел код, я обнаружил, что есть ошибка почти в каждой строке.

#include <stdio.h> 

int largest(int array[][4]); 
int main() 
{ int x,y; 
    int array[4][4]; 
    int row = 4; 
    int col = 4; 
    int bigNum; 

    printf("Please enter a value: "); 

for(x=0;x<row;x++) 
{ 
    for(y=0;y<(col);y++) 
    { 
     scanf("%d",&array[x][y]); 

     } 
    } 
bigNum=largest(array); 
    printf("The largest number in the array is : %d",bigNum); 
} 
int largest(int array[][4]) 
{ 
    int max=0; 
    int x,y; 
    max = array[0][0]; 
    for(x=0;x<4;x++) 
{ 
    for(y=0;y<4;y++) 
    { 
     if (array[x][y]>max) 
     { 
      max = array[x][y]; 
     } 
    } 

} 
return max; 
} 
1

Есть несколько проблем, на решение здесь, во-первых, вы не можете иметь int array[][] в качестве параметра, вам необходимо предоставить все, кроме первого измерения, int array[][4] хватило бы в этом предельном случае.

Однако, поскольку row и col локальные переменные в main они не видимы к вашему largest функций организма, поэтому они должны будут быть переданы, сделать подпись

void largest(int row, int col, int array[row][col]); 

Поскольку это пустота функция, она не может вернуть какое-либо значение. Он изменит массив, который он задал на месте, поэтому изменения будут видны.

Если вы ищете ошибку в правильном журнале, функция поиска самого большого довольно сумасшедшая. Разумнее реализация будет просто отслеживать наибольший элемент вы видели до сих пор:

int largest(int row, in col, int array[row][col]) { 
    int big = array[0][0]; // assume the first element is the largest 
    for (int i = 0; i < row, ++i) { 
     for (int j = 0; j < col; ++j) { 
      if (array[i][j] > big) big = array[i][j]; 
     } 
    } 
    return big; 
} 

можно затем вызвать функцию из основных, как

int bigNum = largest(row, column, array); 
+0

Это имеет смысл, но код для меня не работает. Можно использовать только в c99 для строки: for (int i = 0; i user130431

+1

@ user130431, если вы используете C89, вам придется вытаскивать объявления переменных из цикла, между прочим. Если вы компилируете на linux, просто используйте 'gcc -std = c99', чтобы указать, что вы используете стандарт 1999 C, в отличие от gnu89 –

+0

@ user130431 также проверьте [этот вопрос] (http: // stackoverflow. com/questions/25394582/why-is-it-needed-pass-the-number-of-columns-as-a-function-argument/25394646 # 25394646) –

0

Вам нужно получить значение в массиве от пользователя. Таким образом, вы должны быть основным:

int main() 
{ int x,y,trash; 
    int array[4][4]; 
    int row = 4; 
    int col = 4; 
    int bigNum,greater; 
    printf("Please enter a value: ") 

for(x=0;x<row;x++) 
{ 
    for(y=0;y<(col);y++) 
    { 
     scanf("%d",&array[x][y]); 
     scanf("%d",&trash); 
    } 
} 

    bigNum=largest(array); 
    printf("The largest number in the array is : ",bigNum); 

    return 0;   //Because it is "int" main and not "void" main 
} 
+1

Откат с конца неявно возвращается 0 с C99 –

+1

@RyanHaining: Верно. Я привык к Linux, где это даст ошибку компилятора. В любом случае определение «int main()» и не запись оператора return - очень плохая практика программирования. – vvvv

+1

ни gcc, ни clang даже не будут предупреждать об этом, если используете C99 или выше, поскольку он хорошо определен стандартом. Это не «очень плохая практика программирования», поскольку поведение хорошо определено и известно большинству опытных программистов на С. Если под «linux» вы имеете в виду работу с кодеком кода низкого уровня, совместимым с c89, то да, вы должны явно вернуться. –

0

Ошибки в коде

  1. Вы не можете передать двухмерные массивы, как вы делаете.
  2. Ваша логика, чтобы найти самый большой не является правильным, вы сравниваете при любом движении двух соседних элементов, и если первый мало вы на самом деле делает их равными
  3. Переменные ошибки обзорных, row, col, x и y связаны к основному методу, и вы не можете получить к ним доступ в другом методе. посмотрите на Global Variables, чтобы получить доступ к ним в любом месте в файле программы.
  4. Ненужные scanf for trash и printf в largest method.

    #include<stdio.h> 
    int row = 4; 
    int col = 4; 
    int largestElement(int array[][4],int row); 
    int main() 
    { 
    int x,y; 
    
    int array[row][col]; 
    int bigNum,greater; 
    printf("Please enter a value: "); 
    
    for(x=0;x< row;x++) 
    { 
        for(y=0;y< col;y++) 
        { 
         scanf("%d",&array[x][y]); 
        } 
    } 
    
    bigNum = largestElement(array, sizeof(array)/sizeof(array[0])); 
    printf("The largest number in the array is : ",bigNum); 
    } 
    
    int largestElement(int array[][4],int row) 
    { 
        int x,y; 
        int big =0; 
        for(x=0;x<row;x++) 
        { 
        for(y=0;y<(col-1);y++) 
        if (big < array[x][y]) big = array[x][y]; 
        } 
        return big; 
    } 
    
1

Вы объявили функцию крупнейшей недействительной и пытается сохранить возвращаемое значение функции, не представляется возможным, поэтому изменить его как тип INT данных. Затем строка и значение переменной col не передаются самой большой функции. либо вы должны объявить его глобально, либо передать его в качестве аргумента для наибольшей функции. И вы пытаетесь получить значение для мусора, я не знаю, в чем это нуждается. вы можете удалить его. И сделать следующие изменения в величине функции:

#include <stdio.h> 
int largest(int [4][4]); 
int row = 4; 
int col = 4; 
int main() 
{ int x,y,trash; 
    int array[4][4]; 
    int bigNum,greater; 
    printf("Please enter a value: "); 

    for(x=0;x<row;x++) 
    { 
      for(y=0;y<col;y++) 
      { 
        scanf("%d",&array[x][y]); 
        //scanf("%d",&trash); 
      } 
    } 

    bigNum=largest(array); 
    printf("The largest number in the array is : %d\n",bigNum); 
    return 0; 
    } 
    int largest(int array[4][4]) 

    { 
    int x=0,y=0,big=array[0][0]; 
    for(x=0;x<row;x++) 
    { 
      for(y=0;y<col;y++) 
      { 
        if (array[x][y]>big) 
        { 
          big = array[x][y]; 

        } 
      } 
      printf("\n"); 

    } 
    return big; 
    } 

Попробуйте этот код !!!!!

0

Вы пытаетесь использовать этот код для поиска самых больших элементов в двумерном массиве.

#include <stdio.h> 
int largest(int [][4],int ,int); 
int main() { 
    int x,y,trash; 
    int array[4][4]; 
    int row = 4; 
    int col = 4; 
    int bigNum,greater; 
    printf("Please enter a value: "); 

    for(x=0;x<row;x++) { 
      for(y=0;y<col;y++) { 
        scanf("%d",&array[x][y]); 
      } 
    } 
    bigNum=largest(array,row,col); 
    printf("The largest number in the array is:%d ",bigNum); 
    return 0; 
    } 
int largest(int array[][4], int row, int col) 
{ 
    int x,y,big=array[0][0]; 
    for(x=0; x<row; x++) { 
      for(y=0; y<col-1; y++) { 
        if(big<array[x][y]) 
          big=array[x][y]; 
      } 
    } 
    return big; 
    } 
Смежные вопросы