我試圖讓這個分治工作的結束,但是編譯器是給我:分而治之,可達到非void函數
控制可以達到非空結束函數
我已經通過類似的方案閱讀,並瞭解錯誤意味着程序可能會永遠運行而不會返回。我已經回顧了一些使用「else」而不是「if else」解決的情況(應該先開始)。但是,這並沒有幫助。
我知道在這種情況下使用do while循環並返回是多餘的,我正在擺弄它,希望欺騙編譯器。
錯誤在哪裏?
bool search(int value, int values[], int n)
{
int sorted = 0;
int min = 0;
int max = n;
int mid = n/2;
do
{
//mid is value
if (value == values[mid])
{
printf("value found!");
sorted = 1;
return 1;
}
//search right
else if (values[mid] < value)
{
min = mid + 1;
mid = (max - mid)/2 ;
}
//search left
else if (values[mid] > value)
{
max = mid - 1;
mid = (max - mid)/2;
}
// DNE
else
{
printf("value not found");
sorted = 1;
return 0;
}
}
while(sorted == 0);
}
錯誤是因爲你的函數中的do-while循環後沒有'return;'語句。如果在循環結束後沒有找到值'return''0',那麼做一件事情,所以不需要檢查並且錯誤將被解決。 – ameyCU
有幾個錯誤。 – BLUEPIXY
「程序可能會永久運行而不會返回」 - 這不是錯誤的含義。 – melpomene