如何在C语言多个int函数间传递变量并实现天数递增?
游戏地点函数共享天数变量的实现方案
要解决不同地点函数共享天数、切换时自动加1的需求,用指针传递变量是最直接的方式,具体实现逻辑和代码如下:
核心思路
- 把天数变量
day定义在main函数中,作为全局共享的游戏状态 - 每个地点函数接收
int*类型的参数,通过指针直接访问和修改day的内存值(避免值传递导致的副本问题) - 每次完成当前地点的操作、切换到新地点前,对
day执行自增操作(初始进入第一个地点时不触发自增)
完整代码示例
#include <stdio.h> // 村庄地点函数 int village(int *day) { printf("今天是第%d天,你身处宁静的村庄\n", *day); printf("选择前往的地点:1-森林 2-城镇\n"); int choice; scanf("%d", &choice); return choice; } // 森林地点函数 int forest(int *day) { printf("今天是第%d天,你进入了幽暗的森林\n", *day); printf("选择前往的地点:1-村庄 2-城镇\n"); int choice; scanf("%d", &choice); return choice; } // 城镇地点函数 int town(int *day) { printf("今天是第%d天,你来到了繁华的城镇\n", *day); printf("选择前往的地点:1-村庄 2-森林\n"); int choice; scanf("%d", &choice); return choice; } int main() { int day = 1; int next_place = 1; // 初始地点设为村庄(对应village函数) while (day <= 10) { // 根据玩家选择进入对应地点 switch(next_place) { case 1: next_place = village(&day); break; case 2: next_place = forest(&day); break; case 3: next_place = town(&day); break; default: printf("无效选择,默认返回村庄\n"); next_place = 1; } // 切换地点时天数加1,到第10天就结束游戏 if (day < 10) { day++; } else { printf("\n游戏结束!已用完10天时长\n"); break; } } return 0; }
关键细节解释
- 指针传递的作用:C语言默认是值传递,如果直接传
int day,函数里修改的只是局部副本,不会影响main里的原始变量。用int* day传递指针后,函数可以通过*day直接操作main中变量的内存地址,实现共享修改。 - 天数自增时机:在完成当前地点的交互后、进入下一个地点前执行
day++,刚好符合“离开一个地点后天数加1”的需求——初始进入村庄显示第1天,离开后进入森林/城镇时,天数已经变成2,进入新地点就会显示第2天。 - 扩展建议:如果后续需要添加更多共享状态(比如金钱、道具),可以把这些变量封装成一个结构体,用结构体指针传递,代码会更整洁易维护。
内容的提问来源于stack exchange,提问作者ae winter
相关产品推荐
相关产品推荐

