나는이 이상한 문제가 계속 발생합니다. 잠시 후에 볼 수있는 기능은 2D 배열의 모든 요소 (문자)가 최대한의 위치에 있는지, 즉 문자 위에 빈 공간이 없는지 확인하는 것입니다. 예를 들어, 보드 모양은 다음과 같습니다.정렬 기능 배열 부분 삭제 C
1 X * * X^
2 * X^*
3 o o * X^
4 o^X X X
5^* X *^
1 2 3 4 5
비어있는 공간 위에 빈 공간이 있으므로 (2,1)에 문제가 있습니다.
내 함수는 올바르게 정렬하지만 맨 아래 행에 공백이있는 문자는 삭제합니다. 나는 내 삶을 위해서 왜 그런지 알아낼 수 없다. 여기에 내 정렬 기능이 있습니다.
int bb_float_one_step(BBoard board){
int i,j;
for (i = 0; i < board->rows; i++){
for (j = 0; j < board->cols; j++){
if (board->boardDim[i][j] == None && (board->boardDim[i + 1][j] != None && i + 1 <= board->rows)){
char tmp = board->boardDim[i + 1][j];
board->boardDim[i + 1][j] = board->boardDim[i][j];
board->boardDim[i][j] = tmp;
}
}
}
for (i = 0; i < board->rows; i++){
for (j = 0; j < board->cols; j++){
printf("%c",board->boardDim[i][j]);}printf("\n");}
}
이하 전체 프로그램 사진이 있습니다. 프로그램에서 보드를 인쇄합니다. 사용자가 '팝업'할 영역을 선택하라는 메시지가 나타납니다. 함수는 공백으로 연결된 모든 문자를 바꿉니다. 그러면 그림의 마지막 부분에서 문자가 삭제 된 방법을 볼 수 있습니다. 문자가 실제로 삭제되었는지 여부를 확인하기 위해 국경이없는 보드가 있습니다. 1에 대한 진보에 감사 드리며,이 전체 게시물을 읽고 2, 당신이 줄 수있는 도움. 당신이 다음 행으로 현재 행을 비교하기 때문에 문이, && i <= board->rows
제거하면
'i + 1 <= board-> rows'는 유망하지 않습니다. – WhozCraig
그래서 당신이하려는 것은 모든 빈 공간을 제거한 다음 그 빈 공간을 배열의 마지막 (마지막 행)으로 옮기는 것입니다. 그렇다면 보드를 1 차원 배열로 구현하면 공간을 끝으로 이동하고 나머지 문자를 "함께 묶는"간단한 함수 호출이됩니다. – PaulMcKenzie
디버거는 친구입니다. 사용하고 계십시오. –