从hcf函数中获取控制到达非void函数的末尾
您创建的函数应始终返回int 到达非void函数的末尾意味着具有未定义的行为 这是一个有效的函数,如果没有找到任何内容,它将返回-1从hcf函数中获取控制到达非void函数的末尾,c,C,您创建的函数应始终返回int 到达非void函数的末尾意味着具有未定义的行为 这是一个有效的函数,如果没有找到任何内容,它将返回-1 41 | } | ^ inthcf(inta,intb){ int gcd; 对于(inti=0;i,此函数必须返回一些int值——这就是这里的编译器错误 然而,还有许多其他问题 根据定义,两个互质数的gcd为1。如果a和b是互质数,则不会遇到for循环中的返回值 正如tkausl指出的,对于负a或负b,for
41 | }
| ^
inthcf(inta,intb){
int gcd;
对于(inti=0;i,此函数必须返回一些int值——这就是这里的编译器错误
然而,还有许多其他问题
- 根据定义,两个互质数的gcd为1。如果a和b是互质数,则不会遇到for循环中的
返回值
- 正如tkausl指出的,对于负a或负b,for循环中的返回也从未遇到过
- 即使循环运行,也会有一个bug。对于任何
a>=0
和b>=0
,当i=1
时,都会返回1,因为a%1==0和&b%1==0
总是正确的
inthcf(inta,intb){
int gcd;
对于(int i=0;i如果a
或b
为负怎么办?在某些情况下,返回语句将无法到达-您需要在函数末尾添加一些内容初始gcd=-1,而不是返回,您应该使用内部断开循环,最后在函数末尾返回gcd“到达非void函数的结尾意味着路径可能导致错误类型的返回。”不是真的-它意味着程序无效且具有未定义的行为。因此程序可能会炸毁您的烤面包机或以某种方式工作正常或任何可能的情况。
41 | }
| ^
int hcf (int a, int b) {
int gcd;
for (int i = 0; i <= a && i <= b; i++) {
if (a % i == 0 && b % i == 0) {
gcd = i;
return gcd;
}
}
return -1;
}