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