2015-05-25 5 views
-2
int checkWinDiagonals(char board[N][M]) 
{ 

for(int i = 0; i < (N-3); i++) 
{ 
    for(int j = 0; j < (M-3); j++) 
    { 
if(board[i][j] != ' ' && board[i][j] == board[i+1][j+1]) 
     { 
if (board[i][j] == board[i+2][j+2] && board[i][j] == board[i+3][j+3]) 
    { 
     return 1; 
    } 

     } 
    } 
} 

for(int i = 0; i < (N-3); i++) 

{ 
for(int j = 3; j < M; j++) 
{ 
if(board[i][j] != ' ' && board[i][j] == board[i+1][j-1]) 
    { 

if(board[i][j] == board[i+2][j-2] && board[i][j] == board[i+3][j-3]) 
     { 
      return 1; 
     } 
    } 
} 
return 0; 
} 
} 

Я получаю эту ошибку: «control достигает конца функции non-void». Забудьте int main(), потому что это всего лишь часть кода, в которой она не работает. Мне нужно поставить return (что-то); в каком-то месте?Почему я получаю эту ошибку в этой функции?

+1

Ознакомиться с значением этой ошибки [http://stackoverflow.com/questions/6171500/what-does-control-reaches-end-of-non-void-function-mean](http://stackoverflow.com/вопросы/6171500/что-делает-контроль-достигает-истекшим Непустой-функции-среднего) – Luis

ответ

0

Вы должны действительно формат вашего кода с последовательным отступом, чтобы сделать ошибки следующим образом: лот проще всего определить. Но я подозреваю, что проблема здесь:

//... 
     } 
     return 0; 
    } 
    // right here 
} 

Что происходит во время выполнения, если эти петли не имеют ничего над которой итерацию и пропускаются полностью? Или различные блоки if не оценивают значение true и пропускаются? Конец функции достигнут, и ничего не возвращается, но функция объявлена ​​для возврата int, так что должно быть возвращено.

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