2017-02-03 4 views
-4

Я пишу программу, состоящую из функции, которая принимает 2d-массив, c0unts evens в массиве и возвращает количество эвенов в этом массиве. Функция не возвращает значение, которое я намереваюсь его, которое 6. Иногда я получаю 0, иногда я получаю номер, как 2147483646.Поиск эвенов в массиве

#include <iostream> 
#include <array> 
using namespace std; 



const int MaxNumOfRows = 3; 
const int MaxNumOfColumns = 2; 


int Even(int A[MaxNumOfRows][MaxNumOfColumns], int length, int width) 
{ 

int NumnberOfEvens = 0; 
int i; 
int j; 

for (i = 0; i < length; length++) 
{ 
    for (j = 0; j < width; width++) 
    { 
     if (A[i][j] % 2 == 0) 
     { 
      NumnberOfEvens++; 
     } 
    } 
} 

return NumnberOfEvens; 

} 

int main() 
{ 



//int output = 0; 
int A[MaxNumOfRows][MaxNumOfColumns] = 
{ 
    {2,2},{2,4},{2,2} 
}; 


Even(A, MaxNumOfRows, MaxNumOfColumns); 

//output = Even(A, MaxNumOfRows, MaxNumOfColumns); 

cout << Even(A, MaxNumOfRows, MaxNumOfColumns) << endl; 

system("pause"); 

return 0; 

} 
+1

Правильный инструмент для решения таких проблем - ваш отладчик. Вы должны пропустить свой код по очереди, прежде чем спрашивать о переполнении стека. Для получения дополнительной информации, пожалуйста, прочтите [Как отлаживать небольшие программы (Эрик Липперт)] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/). Как минимум, вы должны [изменить] свой вопрос, чтобы включить [mcve], который воспроизводит вашу проблему, а также замечания, сделанные вами в отладчике. Я проголосовал за то, чтобы закрыть это как типографскую ошибку – Tas

ответ

0

Проверь те, для петель, я полагаю, вы хотите быть приращение переменные ++ i и ++ j, а не ширина ++ и длина ++.

С примером этого тривиального, я предполагаю, что переход через исполняемый код и поиск проблемы в отладчике будет довольно простым ... вы пишете это с помощью IDE с отладчиком?

0

Вы не применяете приращение к переменным цикла ('i' и 'j') здесь. «длина» и «ширина» увеличиваются (из-за длины ++, width ++), тогда как «i» и «j» не являются. Таким образом, цикл не останавливается и, следовательно, значения мусора.

for (i = 0; i < length; length++) 
{ 
    for (j = 0; j < width; width++) 
    { 
     if (A[i][j] % 2 == 0) 
     { 
      NumnberOfEvens++; 
     } 
    } 
} 

Это должно сработать.

for (i = 0; i < length; i++) 
{ 
    for (j = 0; j < width; j++) 
    { 
     if (A[i][j] % 2 == 0) 
     { 
      NumnberOfEvens++; 
     } 
    } 
} 
Смежные вопросы