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

如何让C程序保存变量更新值,实现每次运行输出下一个2的幂?

解决C程序跨运行保存变量值的问题

你的程序每次运行都输出4,核心原因是进程的内存是独立且临时的——每次启动程序,num都会被重新初始化为2,计算后输出4,程序结束后所有变量都会被系统回收,根本没法保留上次运行的数值。

要实现跨运行保存状态,必须用持久化存储,最直接且跨平台的方式是把数值存在文件里。下面是修改后的代码:

#include <stdio.h>
#include <stdlib.h>

#define STATE_FILE "power_state.txt"

int powers(void) {
    int num = 2; // 默认初始值,第一次运行时使用
    FILE *fp;

    // 读取上次运行保存的数值
    fp = fopen(STATE_FILE, "r");
    if (fp != NULL) {
        fscanf(fp, "%d", &num);
        fclose(fp);
    }

    // 计算下一个2的幂
    num *= 2;
    printf("%d\n", num);

    // 将新的数值写入文件,供下次运行读取
    fp = fopen(STATE_FILE, "w");
    if (fp != NULL) {
        fprintf(fp, "%d", num);
        fclose(fp);
    } else {
        fprintf(stderr, "无法写入状态文件,请检查权限\n");
        return 1;
    }

    return 0;
}

int main(void) {
    return powers();
}

运行说明

  • 第一次执行./powers:因为power_state.txt不存在,程序使用初始值2,计算后输出4,同时创建文件并写入4。
  • 再次执行./powers:程序读取文件中的4,计算后输出8,并将8写入文件覆盖原有内容。
  • 若要重置状态,直接删除当前目录下的power_state.txt文件即可。

其他可选方案

  • 环境变量:可以将数值存在环境变量中,但环境变量会随终端会话结束失效,不适合长期保存。
  • 系统注册表(Windows):Windows平台可使用注册表存储,但不具备跨平台性。
  • 数据库:如果需要更复杂的状态管理,可使用轻量数据库(如SQLite),但对于这个简单场景来说过于冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:55:31