1
我在寫一個使用二維數組的程序。用戶選擇一行和一列;如果至少有一個元素直接與N S E或W匹配,則它變爲'。'。 我不斷收到段錯誤,因爲我經過各種測試和問題解決後相當確定,它會陷入如果top == bottom和bottom == top(或左和右)的循環中。由於我需要檢查所有四方,因此我需要對上方和下方進行檢查。 實施例:我被困在如果頂部==底部的循環,如果底部==頂部
0 - + + -
1 + + - -
2 - + - -
3 + + + -
4 - - + -
0 1 2 3
如果用戶選擇(3,1)中的所有+的會改變爲'「。 我將不勝感激關於如何解決此問題的任何建議。下面是該功能的代碼。 謝謝!
extern int bb_pop(BBoardPtr b, int r, int c) {
char bal;
int curr, curc;
curr = r;
curc = c;
if(b->board[curr][curc] == b->board[curr-1][curc] && curr != 0 && b->board[curr-1][curc] != '.') {
curr--;
bb_pop(b, curr, curc);
b->board[curr][curc] = '.';
count++;
curr = r;
curc = c;
}
if(b->board[curr][curc] == b->board[curr][curc-1] && curc !=0 && b->board[curr][curc] != '.') {
curc--;
bb_pop(b, curr, curc);
b->board[curr][curc] = '.';
count++;
curr = r;
curc = c;
}
if(b->board[curr][curc] == b->board[curr+1][curc] && curr < rows-1 && b->board[curr+1][curc] != '.') {
curr++;
bb_pop(b, curr, curc);
b->board[curr][curc] = '.';
count++;
curr = r;
curc = c;
}
if(b->board[curr][curc] == b->board[curr][curc+1] && curc<cols-1 && b->board[curr][curc] != '.') {
curc++;
bb_pop(b, curr, curc);
b->board[curr][curc] = '.';
count++;
curr = r;
curc = c;
}
if(count > 0) {
b->board[r][c] = '.';
}
printf("count %i\n", count); /////////////fix count
return count;
}
然後它只改變每邊的單個元素。它沒有通過整個委員會檢查連接,匹配元素。 –
curr和curc確定我正在檢查哪個字符 - 當前行當前列。所以如果用戶說3 1,它會開始檢查b-> board [3] [1]上的匹配。通過將其更改爲'。'馬上就不會再匹配'+'。我非常糟糕的遞歸,所以有可能是一種更好的方式,我在想什麼,我只是看不到它。 –
我明白你的意思了。我不能在函數中添加任何新參數,但我會嘗試添加一個變量。 –