Функция не вызывается, вместо этого используются ненужные значения.Как мне вызвать функцию и устранить проблему? - PullRequest
0 голосов
/ 03 февраля 2019

Я пытался выполнить простой двоичный / линейный поиск, но есть проблема с выводом, я подозреваю, что функция не вызывается

Небольшая часть void main:

 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;
}

Вывод просто мусор или мусор.Ни одна из моих кроваток не появляется, просто одно случайное значение типа «мусор».

1 Ответ

0 голосов
/ 03 февраля 2019

В вашем коде довольно несколько проблем: -

  • Оставление значений важных переменных, таких как posn и n, неинициализированными..

    C ++ вызывает неопределенное поведение при попытке доступа к значению переменной, которая не инициализирована ... И UB может быть чем угодно, поэтому мусорзначение ожидаемое ...

    Чтобы этого не случилось, инициализируйте их перед использованием ...

    int a, n, posn = -1;
    cout<<"Enter size of array and array"<<endl;
    cin>>n;
    
  • C ++ не имеетфункция массивов переменной длины все же (только в C99 и выше ...) и, следовательно, ar[n] невозможна (хотя есть некоторые компиляторы, такие как Ideone, которые поддерживают ее, носогласно стандарту, это невозможно), что - это , поэтому мы получили преимущества класса, называемого vector внутри пространства имен std

    Примечание: #include <vector> перед использованием ...

    int linear() {
        int a, n, posn = -1;
    
        cout << "Enter size of array and array: " << endl;
        cin >> n;
        // Use vectors for dynamic arrays (or pointers if you want to stay old-school...)
        vector ar(n);
    
        for(auto i = 0; i < n; i++)
            cin>>ar[i];
    
        cout << "Enter element to be found: " << endl;
        cin >> a;
    
        for(auto j = 0; j < n; j++)
            if(ar[j] == a)
                posn= j + 1;
    }
    
...