簡體   English   中英

C ++:幫助我找到錯誤-2D數組搜索-

[英]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::arraystd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM