[英]C++: Help me finding a bug - 2D array search -
我的程序要求輸入數字並將其放置在2D數組中。 然后,它要求一個數字並執行搜索,然后在2D數組中打印該數字的位置。
搜索功能有一個錯誤,該錯誤將預期行位置加1。 通過將1減去“行”變量來“固定”它,但是ovb是不可接受的。
目前對此感到有點愚蠢,將不勝感激。
#include <iostream>
using namespace std;
#define R 3
#define C 2
typedef int matrix[R][C];
void input(matrix m)
{
int i, j;
i = j = 0;
for(i = 0; i< R; i++)
{
for(j = 0; j < C; j++)
{
cout << "Row " << i << " Column " << j << ": ";
cin >> m[i][j];
}
}
}
void search(int x, matrix m, int& row, int& column)
{
int r, c;
bool OK;
OK = false;
r = 0;
while((!OK) && (r < R))
{
c = 0;
while((!OK) && (c < C))
{
if(m[r][c] == x)
OK = true;
else
c++;
}
r++;
}
column = c;
row = r-1; //LOL
}
int main()
{
matrix mat;
int number;
int row;
int column;
input(mat);
cout << "Which number are you looking for?: ";
cin >> number;
search(number, mat, row, column);
cout << endl << "Row " << row << " Column: " << column;
fflush stdin;
getchar();
return 0;
}
您應該通過引用將矩陣傳遞給input
:
void input(matrix& m)
否則,您不會填充矩陣。
我還建議對此進行轉換:
#define R 3
#define C 2
至:
const std::size_t R = 3;
const std::size_t C = 2;
最后,我建議您看一下std::array
和std::search
。
如果OK
為真,最簡單的解決方案是不遞增r
。
您也可以將while
循環替換為它們for
等效項。
for(r = 0; !OK && r < R; r += 1)
{
for(c = 0; !OK && c < C; c += 1)
{
OK = (m[r][c] == x);
}
}
如果OK
為真,那將防止r
增加。
找到值后,代碼必須確保r
不遞增(請參見if語句下面的代碼用於檢查是否找到了值)。 此外,在搜索功能的末尾沒有從r
分配row
。
void search(int x, matrix m, int& row, int& column)
{
int r, c;
bool OK = false;
r = 0;
while((!OK) && (r < R))
{
c = 0;
while((!OK) && (c < C))
{
if(m[r][c] == x)
OK = true;
else
c++;
}
if (!OK)
r++;
}
column = c;
row = r;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.