此代码试图在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;
}
答案 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
)中找到它。