不需要的输出重复和矩阵搜索问题
问题描述:
此代码尝试在硬编码值的5x5矩阵中搜索目标值(项目)。它向用户查询要搜索的值。问题是,当我运行代码时,它会告诉我“发现项目!”不管用户输入。此外,它似乎在重复用户输入。例如,当我使用“87”作为用户输入时,这是我的输出:不需要的输出重复和矩阵搜索问题
您希望搜索什么值? 878787找到了!
我对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;
}
答
正如他的评论你打破只有你的内循环中提到aslg,你需要喙外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)
返回指向目标的指针,如果它可以在[开始,结束[]内找到,否则返回end
。
你for循环中的所有' NathanOliver
正如Nathan指出的那样,您正在对阵列进行无效访问。可能发生的情况是,程序正在读取其中一个访问中的'target'变量,因此总是“找到该项目”。顺便说一下,你的'break'语句只能从内部循环中出来,而不能从外部循环中出来。所以通过每次迭代设置'flag = 0',即使你修复了Nathan指出的问题,你仍然会遇到问题。 – aslg
你可以失去其他部分,也不需要将标志设为0 –