你遇到的问题是因为命令输入的处理方式不正确。代码中使用 cin >> command 来读取命令,但 >> 运算符只能读取到第一个空格之前的内容,导致像 "win P1" 这样的命令只读到了 "win",无法匹配任何条件,因此没有执行预期的操作(尽管会输出错误提示,但紧接着的 system("cls") 清屏让提示一闪而过,用户看不到)。

解决方法 改用 getline 读取整行命令:这样能包含空格后的所有内容。

让错误提示可见:在输出后添加 Sleep 延时,避免被立即清屏。

修改 case '/' 部分的代码:

case '/':
    cout << "/";
    cin.ignore(); // 清除之前可能残留的换行符(如果有)
    getline(cin, command);
    if (command == "win P1") P2_blood = 0;
    else if (command == "win P2") P1_blood = 0;
    else if (command == "moreblood P1") P1_blood++;
    else if (command == "moreblood P2") P2_blood++;
    else if (command == "cheatmode P1") {
        cout << endl << "SYSTEM:CHEATING?";
        system("color 2");
        Sleep(1000);
        system("color 7");
        P1_cheating = !P1_cheating;
        P1_skin = "p";
    }
    else if (command == "cheatmode P2") {
        cout << endl << "SYSTEM:CHEATING?";
        system("color 2");
        Sleep(1000);
        system("color 7");
        P2_cheating = !P2_cheating;
        P2_skin = "q";
    }
    else if (command == "give P1 ender_pearl") P1_have_ender_pearl = true;
    else if (command == "give P2 ender_pearl") P2_have_ender_pearl = true;
    else if (command == "give @a ender_pearl") {
        P1_have_ender_pearl = true;
        P2_have_ender_pearl = true;
    }
    else {
        cout << endl << "This command was not declared!";
        Sleep(1000); // 让用户看到错误提示
    }
    break;

补充说明 添加 cin.ignore() 是为了确保之前没有遗留的换行符干扰 getline(虽然本例中可能不需要,但出于安全考虑建议保留)。

对于正确执行的命令,效果(如血量变化)会在清屏后显示,所以用户能看到结果。

注意原代码中还有一些小问题(如 game[P1_ender_pearl+1]="" 可能导致越界),但不影响命令的输入。

修改后,输入完整命令(如 win P1)并按回车即可生效。