【发布时间】:2016-08-13 22:27:04
【问题描述】:
我得到了一段代码:
int check(int d, char arr[9][9], int rep_arr[45][3]) {
int p = findProb(d, arr, rep_arr, 0) ;
if (isIdeal(d, arr) == 1) {
print_array(d,arr) ;
return 1 ;
}
else if(isIdeal(d,arr) == 0 && p == 0){
printf("Fail\n") ;
return 0 ;
}
else if (isIdeal(d, arr) == 0 && p != 0) {
#do something recursively..
}
其中isIdeal(d, arr) 只能等于0 或1,而p 可以等于0 或其他整数。
但是,编译器给了我标题中给出的错误。
后来我在那段代码的末尾添加了return 0。
现在它可以工作,但不能以函数方式工作,因为函数返回的内容非常重要。
另一个关键的事情是,当我添加一个else 块以避免在该站点上的另一个主题see more at link 上指示失败时,它从未进入该else 块。但是无论我是否添加@,它总是return 0 987654333@ 块与否,通过这种方式,所有可能性都以return 行结束。怎么样?
【问题讨论】:
-
如果
case1不是1或0会发生什么。 -
编译器无法判断
case1的值只能是0或1。如果传递的参数是2,那么它会从函数的末尾掉下来,这就是为什么它会警告你这个问题。 -
如果你告诉我们的是真的,那么在函数末尾添加
return 0对程序的行为没有影响(因为它永远不会到达。) -
我的下一个猜测是你的真实函数涉及递归,然后当递归调用返回时继续到函数的末尾。那是 return 0 影响行为的时候。