You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:35:36