我的程序要求输入数字并将它们放在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;
}
答案 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::array
和std::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;
}