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

C++如何将用户输入的a/w/s/d移动操作存储到数组并查看历史?

问题原因

  • 你把数组赋值的for循环放在了单次用户输入的逻辑之后,每次输入一个新字符都会遍历整个数组的前10个位置,全部覆盖为当前输入的Choice_1,最终所有值都会变成最后一次输入的字符。
  • 循环内的move[i + 1];是无效语句,没有任何执行效果。

修复方案

你不需要每次输入都遍历整个数组赋值,只需要维护一个独立的计数器,每次输入合法操作后将字符存入数组对应位置,计数器自增即可:

  1. 首先在输入逻辑的外层(全局或者外层循环开头)定义存储数组和计数变量,示例如下:
// 假设最多存储100条操作记录,可按需调整大小
const int MAX_MOVE = 100;
char move[MAX_MOVE];
int move_cnt = 0; // 记录当前已经存储的操作数量
  1. 删除你原来写的错误for循环,在用户输入Choice_1且判断为合法wasd操作后,添加存储逻辑:
cin >> Choice_1;
char op = tolower(Choice_1);
// 先判断是否是合法操作
if (op == 'a' || op == 'w' || op == 's' || op == 'd') {
    // 数组未满时存入操作
    if (move_cnt < MAX_MOVE) {
        move[move_cnt++] = op;
    }
    // 剩下是你原来的操作逻辑
    if (op == 'a') {
        cout << "You made a step to the left" << endl;
        value1 = -1;
        if (value1 < 0) break;
    }
    // 剩下w/s/d的判断逻辑保持不变即可
}
  1. 后续需要查看操作历史时,遍历从0到move_cnt - 1的数组元素即可:
cout << "移动操作历史:" << endl;
for (int i = 0; i < move_cnt; i++) {
    cout << i + 1 << ". " << move[i] << endl;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:45:03