我试图在用户先前输入值的数组中找到任何用户输入的值。 我做了以下工作来查找在数组中输入的值 但似乎无法知道在哪里插入循环以查找用户输入的搜索值
确定 更新
我正在寻找一种方法来查找用户在之前输入的数组中输入的值 如果它的逻辑
,这样的东西确定第二次更新
这就是我一直在努力的方面 我很震惊 未找到输入的搜索值
#include<iostream>
#include<conio.h>
using namespace std;
void main ()
{
int a[10], found;
for(int i=0;i<10;i++)
{
cout<<"enter value : ";
cin>>a[i];
}
cout<<"Enter Searching Value :";
cin>>found;
for(int i=0;i<10;i++)
{
if(found == a[10])
{
cout<<"Value Found";
_getch();
}
else if (found != a[10])
cout<<"Value Not Found";
}
_getch();
}
答案 0 :(得分:1)
你在这里解决一个发现问题。您没有任何建议,输入的值可能是,所以你应该逐步尝试每一个。这是一个常见问题。
解决它的第一种方法是使用循环。它不是现代C ++的好方法。但你应该尝试一下练习。
bool has(int val, int const* arr, size_t size) {
size_t idx = 0;
// Iterates each element of array and checks
// whether the one is equal to the `val`. In
// case of meeting of `val`, the loop stops.
while (idx < size && arr[idx] != val) ++idx;
return idx != size;
}
以下方式更方便。实际上,has
标题中的C ++标准库中已经有<algorithm>
函数的更一般形式。它被称为find
。它完全相同,但更好。实际上,有许多函数可以解决<algorithm>
标题中的常见问题。你必须在任何地方使用它。
bool has_(int val, int const* arr, size_t size) {
int const* end = arr + size;
// Now `has_` don't iterate each element and
// checks it. It finds the `val` in range
// between the first element of array and
// the last.
return std::find(arr, end, val) != end;
}
我建议你阅读小节&#34; Prefer算法调用手写循环。&#34;在&#34; STL:容器&#34;在书里
"C++ Coding Standarts" by Herb Sutter and Andrei Alexandrescu
获得关于为什么使用<algorithm>
标题的直觉。
另外,您可以找到对<algorithm>
标题here的引用。
让我们考虑您的代码并讨论为什么最终会出错。实际上,你刚刚输入了一个拼写错误。
这是使用<algorithm>
标题而不是像你这样的手写循环的原因之一。
#include<iostream>
#include<conio.h>
using namespace std;
void main()
{
int a[10], found;
for (int i = 0; i<10; i++)
{
cout << "enter value : ";
cin >> a[i];
}
cout << "Enter Searching Value :";
cin >> found;
for (int i = 0; i<10; i++)
{
// Look at here: you compare entered value ten times
// with the value after the last element of array.
if (found == a[10])
{
// In case that you found an entered value in array
// you just continue the loop. You should probably
// break it at this point. This may be achieved by
// using the `brake` operator or the `while` loop.
cout << "Value Found";
_getch();
}
else if (found != a[10])
cout << "Value Not Found";
}
_getch();
}
答案 1 :(得分:-1)
我认为这个答案可以解决你的问题.. :)
#include<iostream>
#include<conio.h>
using namespace std;
void main ()
{
int a[10];
for(int i=0;i<10;i++)
{
cout<<"enter value : ";
cin>>a[i];
}
int random;
cin>>random;
int flag=0;
for(int i=0;i<10;i++)
{
if(a[i]==random)
{
flag=1;
cout<<"Found at a["<<i<<"]"<<endl;
break;
}
}
if(flag==0)
cout<<"element not found"<<endl;
return 0;
}
答案 2 :(得分:-3)
您的问题是整数数组在已分配和未分配之间没有明确的定义。你需要一种方法来“标记”这些整数。您可以使用布尔值的奇偶校验数组执行此操作,该数组将基于std :: cin.fail()进行标记,或者使用int *并使用NULL进行标记。有很多方法可以做到这一点。
std::vector<int*> a(10);
for(int i=0;i<10;i++){
int input;
cout<<"enter value : ";
cin >> input;
if(!cin.fail()) {
a[i] = new int(input);
}else{
cin.clear(std::ios_base::failbit);
}
}
现在,您可以测试向量a的NULL指针。