[英]error: control may reach end of non-void function
當我嘗試編譯包含線性搜索功能的聲明的ac文件時,此錯誤出現在我的身上
bool search(int value, int values[], int n)
{
// TODO: implement a searching algorithm
for(int d = 0;d<n;d++){
if(n<0){
return false;
}
else if(values[d]==value){
return true;
}
else{
return false;
}
}
}
我的代碼有什么問題? 請幫忙。
代碼存在一些問題:
n = negative number or 0
時,該方法的路徑不返回任何內容(如注釋所示) int values[] = { 1, 2, 3, 4, 5 };
測試int values[] = { 1, 2, 3, 4, 5 };
並搜索3
,您的代碼找不到該值。 如果要搜索特定值,則代碼為:
bool search(int value, int values[], int n) {
for (int d = 0; d < n; d++) {
if (values[d] == value) {
return true;
}
}
return false;
}
問題在於傳遞給函數的參數n為n <= 0
。 循環從不執行,並且函數在不返回任何值的情況下完成。
要解決此問題,請將if(n <= 0)
語句放在for
循環之前。
如果“ for”循環沒有執行任何迭代,則您將無法從該函數返回任何內容。 也許添加一個邊緣案例
if(n <=0 )
return false;
在循環之前。
d
在for
循環中遞增,直到等於n
的值。 此時,將執行for
循環之外的代碼。
由於在for
循環之外沒有任何指令,因此該函數返回到調用方。 由於在這種情況下該函數沒有返回(布爾)值,因此發生error
。
通過遵循Mahonri編寫可維護C代碼的規則列表中的規則 #1可以避免該錯誤。 例:
bool search(int value, int values[], int n)
{
bool rCode=false;
// TODO: implement a searching algorithm
for(int d = 0;d<n;d++)
{
if(n<0)
{
goto CLEANUP;
}
else if(values[d]==value)
{
rCode=true;
goto CLEANUP;
}
else
{
goto CLEANUP;
}
}
CLEANUP:
return(rCode);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.