C ++:帮我找一个bug - 二维数组搜索 -

时间:2014-04-17 15:26:40

标签: c++ arrays search

我的程序要求输入数字并将它们放在2D数组中。 然后它要求一个数字并执行搜索,之后它在2D数组中打印所述数字的位置。

搜索功能有一个错误,它将预期的行位置加1。 "固定"通过将1减去"行"变量,但它是不可接受的。

目前对此感到有些愚蠢,帮助将不胜感激。

#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;
}

3 个答案:

答案 0 :(得分:2)

您应该通过引用传递矩阵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

答案 1 :(得分:0)

最简单的解决方案是,如果r为真,则不会增加OK

您还可以使用while等效项替换for循环。

for(r = 0; !OK && r < R; r += 1)
{
    for(c = 0; !OK && c < C; c += 1)
    {
        OK = (m[r][c] == x);
    }
}

如果r为真,那将阻止OK递增。

答案 2 :(得分:0)

当找到该值时,代码必须确保r不会递增(请参阅下面的代码,if语句用于检查是否已找到值)。此外,在搜索功能结束时,row未分配r

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;
}