Как присвоить возвращаемое значение функции переменной в c ?

#c #variables #return

#c #переменные #Возврат

Вопрос:

я хочу присвоить возвращаемое значение функции переменной в C , но программа завершается без какого-либо вывода.

 int numberPosition = binarySearch(arr, num, searchNumber);
 

скриншот вывода программы

Полный код—

 #include <iostream>
using namespace std;


int binarySearch(int arr[], int num, int searchNumber){
    int start=0, end=num;

    while(start<=end){
        int mid = (start end) / 2;
        if(arr[mid] == searchNumber){
            return mid;
        }else if(arr[mid] <= searchNumber){
            start = mid 1;
        }else{
            end = mid-1;
        }
    }
    
    return -1;
}

int main(){
    
    int num, arr[num], searchNumber;
    cout<<"How many Elements u want to insert? n";
    
    cin>>num;
    
    cout<<"n Enter ut Numbers:- n";
    for(int i=0; i<num; i  ){
        cin>>arr[i];
    }
    
    cout<<"n Enter the Number u want to search:- ";
    cin>>searchNumber;
    
    int numberPosition = binarySearch(arr, num, searchNumber);
    
    if(numberPosition){
        cout<<searchNumber<<" is founded at position: "<<numberPosition;
    }else{
        cout<<searchNumber<<" is Not Founded";
    }
    
    return 0;
}   
 

Комментарии:

1. Что вы ожидали, когда запускали эту программу?

2. Вы ввели какие-либо инструкции вывода в программу?

3. Пожалуйста, отредактируйте это, чтобы включить минимально воспроизводимый пример. Как вы ожидаете, что люди помогут, если мы не знаем, как вы написали binarySearch , arr , num , или searchNumber ?

4. Присвоение возвращаемого значения переменной не выводит это значение. Вы, вероятно, хотите сделать что-то вроде #import <iostream> , а затем после строки, которую вы включили, сделайте std::cout << numberPosition << "n"; .

5. хорошо, извините… я включаю полный код

Ответ №1:

Здесь этот код работает. Вам нужно объявить длину массива с переменной num после того, как вы приняли входное значение num .

 #include <iostream>
using namespace std;


int binarySearch(int arr[], int num, int searchNumber){
int start=0, end=num;

while(start<=end){
    int mid = (start end) / 2;
    if(arr[mid] == searchNumber){
        return mid;
    }else if(arr[mid] <= searchNumber){
        start = mid 1;
    }else{
        end = mid-1;
    }
}

return -1;
}

int main(){

int num, searchNumber;
cout<<"How many Elements u want to insert? n";

cin>>num;
int arr[num];
cout<<"n Enter ut Numbers:- n";
for(int i=0; i<num; i  ){
    cin>>arr[i];
}

cout<<"n Enter the Number u want to search:- ";
cin>>searchNumber;

int numberPosition = binarySearch(arr, num, searchNumber);

if(numberPosition!=-1){
    cout<<searchNumber<<" is founded at position: "<<numberPosition;
}else{
    cout<<searchNumber<<" is Not Founded";
}

return 0;
}  
 

Ответ №2:

Код возврата, который я могу видеть на скриншоте вашей программы 3221225725 . Этот код возврата означает, что your computer ran out of stack memory before the recursion limit was reached. .

Итак, у вас все еще есть бесконечная рекурсия где-то в вашем коде.

Итак, я думаю, что в вашей функции binarySearch(arr,num,searchNumber) вы где-то рекурсивно вызываете свою функцию. Поскольку вы не опубликовали код своей функции, я не могу помочь вам в том, где вы допустили ошибку.

Поэтому убедитесь, что ваша реализация верна. Правильная реализация функции двоичного поиска c

 int binarySearch(int arr[], int l, int r, int x) 
{ 
    if (r >= l) { 
        int mid = l   (r - l) / 2; 

        if (arr[mid] == x) 
            return mid; 

        if (arr[mid] > x) 
            return binarySearch(arr, l, mid - 1, x); 

        return binarySearch(arr, mid   1, r, x); 
    } 

    return -1; 
}