You need to enable JavaScript to run this app. C语言开发文字冒险游戏 getArea函数封装后nDay变量不更新
优惠活动
大模型
产品
解决方案
定价
更多

C语言开发文字冒险游戏 getArea函数封装后nDay变量不更新

nDay无法正常更新的原因拆解

核心本质:nDay的存在周期撑不起累加需求

你现在的代码里,nDay是定义在getArea函数内部的自动局部变量:

  • 这类变量存放在程序的栈内存上,仅在getArea被调用、到函数执行完return返回main的这段时间内有效。一旦函数退出,栈上分配给nDay的内存就会被系统回收,之前累加的数值会直接消失,根本留不到下一次函数调用。
  • 更直接的问题是你在getArea刚启动的位置就写死了nDay = 2;,哪怕上一次调用函数时把nDay累加到了15,下一次main的switch分支再触发getArea执行,第一行就会把nDay强制重置回初始值2,完全没有保留累加结果的可能。

为什么内嵌到main里运行就正常

把区域选择逻辑直接写在main里时,nDay是main函数的局部变量:从程序启动进入main开始,这个变量的栈空间会一直保留到main执行结束。你在switch分支里执行nDay++操作的就是这个长期存在的变量,累加结果会一直保留,自然能正常更新。

设计上的遗漏

C语言默认是值传递,你现在的getArea既没有把内部的nDay通过返回值传回给main,也没有通过指针参数传入nDay的地址做双向修改,函数内部对nDay的所有操作,根本不会影响到main侧的变量,自然达不到正常累加的效果。

补充:如果要恢复nDay的累加逻辑,要么在main中定义nDay变量、将其内存地址通过参数传给getArea直接操作,要么将nDay定义为静态全局变量,才能让它的累加值跨函数调用保留。

内容的提问来源于stack exchange,提问作者Kumari VJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 05:36:03