没有调用函数,而是使用了垃圾值。如何调用该函数并解决问题?

时间:2019-02-03 05:46:21

标签: c++ codeblocks

我尝试执行简单的二进制/线性搜索,但是输出出现问题,我怀疑未调用该函数

一小部分无效主体:

 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垃圾值。

1 个答案:

答案 0 :(得分:1)

您的代码中有很多几个问题:-

  • 未初始化posnn等重要变量的值...

    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>