我的if和else if语句为何异常?C语言非void函数编译报错求助
编译错误分析:control reaches end of non-void function
你遇到的编译错误如下:
Solution.c: In function ‘hurdleRace’: Solution.c:43:1: error: control reaches end of non-void function [-Werror=return-type]
你的代码实现:
int hurdleRace(int k, int height_count, int* height) { int doses = 0; int maxH = height[0]; for (int i = 0; i < height_count; i++) { if (maxH < height[i]) { maxH = height[i]; } } if (k >= maxH) { return 0; } else if (k < maxH) { doses = maxH - k; return doses; } }
问题原因
逻辑上k >= maxH和k < maxH确实覆盖了所有数值可能性,但编译器的静态检查不会做这种逻辑推导——它只看到你用的是else if分支,而非else,因此会判定存在未覆盖的路径,导致函数走到末尾却没有返回值,触发该错误。
修复方法
把else if (k < maxH)改成else即可,让编译器明确所有分支都有返回值:
int hurdleRace(int k, int height_count, int* height) { int doses = 0; int maxH = height[0]; for (int i = 0; i < height_count; i++) { if (maxH < height[i]) { maxH = height[i]; } } if (k >= maxH) { return 0; } else { doses = maxH - k; return doses; } }
也可以用更简洁的三元表达式写法:
int hurdleRace(int k, int height_count, int* height) { int maxH = height[0]; for (int i = 0; i < height_count; i++) { if (maxH < height[i]) { maxH = height[i]; } } return maxH > k ? maxH - k : 0; }
内容的提问来源于stack exchange,提问作者Mina Hany
相关产品推荐
相关产品推荐

