我是C ++的新手,刚刚开始学习函数。我已经制作了一个程序,使用函数 search 搜索一维数组中的元素。但是我无法理解这个逻辑错误!是因为声明函数的方式吗?
int pos;
using namespace std;
int search(int *a, int size, int num);
int search(int *a, int size, int num)
{
int i;
for(i=0; i<size; i++)
{
if(a[i]==num)
{
pos=i; return 1;
}
else
return 0;
}
}
int main()
{
int a[5], size, num, i;
system("cls");
cout<<"Enter size(<5) \n";
cin>>size;
cout<<"Enter the elements of the array \n";
for(i=0; i<size; i++)
cin>>a[i];
cout<<"Enter the number to be searched \n";
cin>>num;
int b = search( a, size, num);
if(b==0)
{
cout<<"Element not found!"; exit(0);
}
else
cout<<"Element found at position "<<(pos+1);
system("pause");
return 0;
}
输出:
Enter size(<5)
4
Enter the elements of the array
4
3
2
1
Enter element to be searched
4
Element not found!
答案 0 :(得分:2)
您的函数始终在第一次循环迭代中返回。如果第一个元素不是要搜索的元素,则立即返回0。循环永远不会进入第二次迭代。
答案 1 :(得分:0)
如果你没有发现任何东西,你必须返回未找到的东西,使用此代码,如果第一个元素不是你要搜索的内容,你将始终返回零。像这样的东西:
int search(int *a, int size, int num)
{
int i;
for(i=0; i<size; i++)
{
if(a[i]==num)
{
pos=i; return 1;
}
}
return 0;
}
答案 2 :(得分:0)
这是你的逻辑
int search(int *a, int size, int num)
{
int i;
for(i=0; i<size; i++)
{
if(a[i]==num)
{
pos=i; return 1;
}
else
return 0;
}
}
让我们一步一步。我要给它[1, 2, 3, 4]
,4
和3
。
i => 0
a[0] => 1
a[0] == 3 => false
return false
所以,你检查第一个,如果这不起作用,它将立即失败。
所以试试这个:
int search(int *a, int size, int num)
{
for(int i = 0; i < size; ++i)
{
if(a[i]==num)
{
pos = i;
return 1;
}
}
return 0;
}
然而,更好的方法是做这样的事情,并摆脱你的全局变量
int search(int *a, int size, int num)
{
for(int i = 0; i < size; ++i)
{
if(a[i]==num)
{
return i;
}
}
return -1;
}
然后,如果你得到了!= -1
,你就找到了它。
答案 3 :(得分:0)
您的search
函数未执行您认为正在执行的操作:它将在0
后立即返回a[i]!=num
,因此不会考虑数组的其余元素。< / p>
你最好使用像这样的东西,返回一个(非全局)变量:
#include <cstdlib>
// returns -1 if not found, else the found index
int search(int *a, int size, int num)
{
int pos = -1;
for(int i=0; i<size; i++)
{
if(a[i]==num)
{
pos = i;
break;
}
}
return pos;
}
// ... main() and parsing stuff goes here
if( (b = search( a, size, num)) == -1)
{
std::cerr<<"Element not found!";
return EXIT_FAILURE;
}
答案 4 :(得分:0)
问题在于你的else语句。如果没有立即找到该元素,它将自动返回0.此外,使用整数0表示找不到该元素,但是如果在位置0找到该元素该怎么办(即它是第一个元素)数组)?然后你仍然会说找不到元素,即使它清楚地存在于数组中。我就是这样做的。
bool search(int *a, int size, int num)
{
for (int i = 0; i < size; ++i)
{
if (a[i] == num)
{
cout << "Element found at position " << i << " of the array!" << endl;
return true;
}
}
cout << "Element not found!" << endl;
return false;
}
我希望你已经了解了布尔值(即真或假)。由于你的函数的主要目的是搜索,它应该返回是否找到元素(true)或者是否找不到(false)。因此,我们遍历数组,如果找到它,我们输出元素的位置,并返回true。否则,如果我们退出循环,这意味着尚未找到该元素,因此我们输出该元素并返回false。这摆脱了全局变量的使用和我之前提到的问题。