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

C++如何将输入的存档码字符串按固定长度拆分赋值给整型变量

C++实现8位存档码按2位分段赋值玩家属性

你原代码的核心问题是用int类型接收存档码输入:一方面存档码长度稍大就会触发整数溢出,另一方面数值类型无法直接按固定字符长度分段,直接用字符串接收输入是最稳妥的实现方案。

实现逻辑

  • 将原代码中int PlayerSaveName替换为std::string类型,接收用户输入的完整存档码字符串
  • 增加基础输入校验:判断输入存档码长度是否为8位(4组属性每组占2位),长度不符直接提示无效,避免读入脏数据
  • 从字符串起始位开始,每2位截取一个子串,转换为整型后依次赋值给等级、最大生命值、最大护甲、攻击力四个变量

修改后可直接运行的代码

记得在文件头引入<string>头文件支持字符串操作,原有其他逻辑保持不变即可:

#include <string>
#include <iostream>
#include <cstdlib> // 给system函数提供支持
// 其他你原有项目需要的头文件保留即可

int PLRlvl; // 玩家等级
int PLRmhp; // 最大生命值
int PLRmap; // 最大护甲
int PLRdmg; // 攻击力
int Data_GamePhase; // 原有全局变量保留

void SelectSave()
{   
    Data_GamePhase = 2;
    WindowTitle();
    system("cls");

    std::cout << "Enter your save code.\n";
    std::cout << "Code: ";
    // 用字符串接收存档码输入
    std::string saveCode;
    std::cin >> saveCode;

    // 长度校验:标准存档码固定为8位
    if (saveCode.length() != 8) {
        std::cout << "存档码无效,请输入8位正确格式的存档码!\n";
        return;
    }

    // 按每2位一组拆分转int赋值
    // substr第一个参数为截取起始位置,第二个参数为截取长度
    PLRlvl = std::stoi(saveCode.substr(0, 2));  // 取前2位:第1-2个字符
    PLRmhp = std::stoi(saveCode.substr(2, 2));  // 取第3-4个字符
    PLRmap = std::stoi(saveCode.substr(4, 2));  // 取第5-6个字符
    PLRdmg = std::stoi(saveCode.substr(6, 2));  // 取最后2位:第7-8个字符

    // 后续读档成功后的跳转、逻辑处理写在这里即可
}

扩展提示:如果后续要加长存档码、新增存档属性,只要按相同规则调整substr的起始位置和截取长度即可。如果要做更严谨的校验,可以额外加一步判断输入字符是否全为数字,避免用户输入字母、符号时转整型报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:09:42