提问人:ArghyaGh 提问时间:10/12/2023 最后编辑:ChrisArghyaGh 更新时间:10/14/2023 访问量:59
未获得简单 C 程序的预期输出
Not getting expected output of a simple C program
问:
#include<stdio.h>
int Bye(int n);
void main()
{
int n = 10;
printf("%d", Bye(n));
}
int Bye(int m)
{
if (m > 0) {return (m+Bye(m-2));}
}
在这里,此代码在代码块或任何其他 c 编译器上运行时输出 30。 根据我的期望,代码不应该给出任何输出,但它给出了 30 的输出。
原因是每次迭代后,“m”的值都会减少 2,直到 m = 0 时,编译器应该忽略“if”块内的任何语句,因为 (m > 0)。因此,当编译器跳过“if”语句中的代码块时,整个“return”函数也会被跳过,这意味着“Bye”函数将没有返回,这意味着没有输出或某种错误。 总之:-
这是应该发生的: 10+8+6+4+2+0 => (m>0) => 跳过返回函数 => 无返回 => 无输出/错误
但相反,这种情况发生了: 10+8+6+4+2+0 => (输出 = 30)
请解释为什么会这样。
答:
1赞
Chris
10/12/2023
#1
您的函数不会在所有分支中返回。Bye
int Bye(int m) { if (m > 0) {return (m+Bye(m-2));} }
最终,递归将导致传递一个不大于 的值,然后将调用未定义的行为。函数的返回值是不确定的。看起来在少于您想要返回的情况下.如果是这样,你应该尽可能明确地说明。Bye
0
Bye
m
0
0
int Bye(int m)
{
if (m > 0) {
return (m + Bye(m-2));
}
else {
return 0;
}
}
确保在编译时打开所有警告。
样式说明:可能适用于您的编译器,但更喜欢现代 C。void main() { ... }
int main(void) { ... }
评论
0赞
Chris
11/10/2023
如果你觉得答案对你的问题是一个很好的答案,你可以在 Stack Overflow 上通过将答案标记为已接受来表示感谢。
评论
else
m<=0
m > 0
int
int
main
函数......首先必须声明返回,其他任何内容都是无效的。但这是唯一不需要明确声明的功能。如果缺少一个,则编译器将假定它将返回 。int
return
0
m
m+Bye(m-2));
m-2
Bye
return