- gf25003 的博客
cpp
- @ 2026-3-5 15:43:59
你遇到的问题是因为命令输入的处理方式不正确。代码中使用 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)并按回车即可生效。