为何do while循环所在的函数中需要使用return语句?
为什么C语言函数中的do-while循环结束后还需要return语句?
先看你给出的代码:
int get_negative_int(void) { int n; do { n = get_int("Negative integer: "); printf("n is %i\n", n); } while (n < 0); return n; }
你的疑惑
这段代码里的return n;让我不解——do while循环在n<0时会一直运行,直到n≥0才终止,为什么循环结束后还要用return返回n?难道循环结束后n的值不能直接传递出去吗?我没遇到编译报错,但搞不懂这里return的作用,希望有人能解释清楚。
解答
这得从C语言的函数规则说起:
- 你定义的函数返回类型是
int,非void类型的函数必须返回对应类型的值,这是C语言的硬性语法要求。你没遇到报错可能是编译器做了宽松处理,但这属于未定义行为,绝对不能依赖——换个严格的编译器,肯定会报错。 - 循环结束后,变量
n确实存在,但它是函数的局部变量,作用域仅限函数内部。一旦函数执行完毕,局部变量会被系统销毁,如果你不用return把它的值传递出去,调用这个函数的地方根本拿不到n的结果。 - 举个实际场景:假设你在主函数里写
int num = get_negative_int();,如果没有return n;,num会拿到一个随机的垃圾值,因为函数没把n的有效值传回来。
另外顺便提一句:你这段代码的逻辑有问题。函数名是get_negative_int(获取负整数),但循环条件是while (n < 0)——意思是输入负数时会一直循环,直到输入非负数才停止,这和函数的预期功能完全相反,应该把循环条件改成while (n >= 0)才对。
内容的提问来源于stack exchange,提问作者DKXP
相关产品推荐
相关产品推荐

