我尝试执行简单的二进制/线性搜索,但是输出出现问题,我怀疑未调用该函数
一小部分无效主体:
void main()
{ cout<<"Linear or Binary? (1/2)"<<endl;
cin>>ch;
switch(ch)
{
case '1': pos = linear();
cout<<"Position: "<<pos;
break;
case '2': pos = binary();
cout<<"Position: "<<pos;
break;
default: cout<<"error"<<endl;
}
}
//here is a function:
int linear()
{
int a, n, ar[n], posn;
cout<<"Enter size of array and array"<<endl;
cin>>n;
for(int i =0; i<n; i++)
{
cin>>ar[i];
}
cout<<"enter element to be found"<<endl;
cin>>a;
for(int j=0; j<n; j++)
{
if(ar[j]==a)
{
posn= j+1;
}
}
return posn;
}
输出只是垃圾或垃圾。我的提示都没有出现,只是一个随机的int垃圾值。
答案 0 :(得分:1)
您的代码中有很多几个问题:-
未初始化posn
和n
等重要变量的值...
C ++ 在您尝试访问未初始化的变量的值时调用未定义的行为... UB 可以是任何值,因此垃圾值是预期 ...
为防止这种情况发生,请在使用前对其进行初始化...
int a, n, posn = -1;
cout<<"Enter size of array and array"<<endl;
cin>>n;
C ++尚不具有 variable length arrays的功能(仅在C99及更高版本中...),因此ar[n]
是不可能的(尽管有一些像Ideone这样的编译器支持它,但是按照标准,这是不可能的),这就是 的原因,我们为什么在命名空间{{中拥有vector
类的优势1}}
注意:
std
在使用前...
#include <vector>