不需要的输出重复和矩阵搜索问题

时间:2016-03-02 18:49:38

标签: c++

此代码试图在5x5矩阵中搜索我将值硬编码的目标值(项目)。它向用户查询要搜索的值。问题是,当我运行代码时,它告诉我"找到了项目!"无论用户输入如何。此外,它似乎重复用户输入。例如,当我使用" 87"作为用户输入,这是我的输出:

您想要搜索的价值是多少? 878787Item found!

我是C ++的新手,所以如果我做了一些愚蠢的话,请原谅我。代码如下:

#include <iostream>
#include <algorithm>
#include <array>

using namespace std;

int main()
{
    int target;
    int flag;
    int mat[5][5]= //hardcoded the matrix data
    {
       {1,2,3,4,5},
       {6,7,8,9,10},
       {11,12,13,14,15},
       {16,17,18,19,20},
       {21,22,23,24,25}
    };

    cout<<"What is the value you'd like to search for? ";
    cin>>target;

    for(int x=0;x<5;x++)
    {
        for(int y=0;y<5;y++)
        {
            if (mat[x][y]==target)
            {
                flag=1;
                break;
            }
            else
            {
                //do nothing
            }
        }
    }
    if(flag == 1)
    {
        cout<<"Item found!";
    }
    else
    {
        cout<<"Item not found.";
    }

    return 0;
}

1 个答案:

答案 0 :(得分:0)

正如他在评论中提到的那样,你只打破了你的内循环,你也需要在外部for(int x=0;x<5;x++)循环中喙。您可以在内循环之后通过声明:

来执行此操作
if(flag==0){
   break;
}

但这不是一个特别优雅的解决方案。我建议你让标准库完成这项工作。

int* end = mat[0]+25;
int* found = std::find(mat[0],end,target);

if(found!=end)
{
    cout<<"Item found!";
}
else
{
    cout<<"Item not found.";
}

这里发生了什么:事实上,静态多维5x5数组存储为大小为25的一维数组。mat[0]指向其开始,mat[0] + 25指向其结尾。 std::find(start,end,target)返回指向目标的指针,如果可以在[start,end [,else end)中找到它。