C++编写的密码黑客游戏输入错误密码仍进入下一关如何解决?
问题原因
你程序的问题出在两处逻辑错误:
- 密码校验条件写错:当前你用了
&&(逻辑与)做错误判断,只有当玩家输入的数字和、乘积同时都不等于正确值时才会判定密码错误,只要任意一个值匹配就会被判定为正确,显然不符合要求。 - 关卡递进逻辑无判断:主函数的while循环中,完全没有用到
PlayGame返回的通关结果,不管玩家密码对错,都会直接累加关卡等级进入下一关。
修复方案
- 调整密码判断逻辑:只有当数字和、乘积同时等于正确值时,才判定密码正确,其余情况均为错误
- 主函数增加关卡递进的判断:只有通关成功才提升难度等级,失败则保持当前等级重新挑战
修复后完整代码
#include <iostream> void Intro(int Level) { std::cout << "嘿,这台电脑被锁了\n\n" << "行啊,你可以试试……输错密码的话一切就都结束了\n" << "输入你能想到的最优密码,攻破编号为 " << Level << " 的服务器"; } bool PlayGame(int Diff) { Intro(Diff); int CodeA = 0; int CodeB = 1; int CodeC = 2; int CodeProduct = CodeA * CodeB * CodeC; int CodeSum = CodeA + CodeB + CodeC; std::cout << std::endl; //提示信息 std::cout << "+ 密码是3个数字" << "\n+ 数字相加的和为 " << CodeSum << "\n+ 数字相乘的积为 " << CodeProduct << std::endl; int PlayerGuessA; int PlayerGuessB; int PlayerGuessC; std::cin >> PlayerGuessA >> PlayerGuessB >> PlayerGuessC; int PlayerSum = PlayerGuessA + PlayerGuessB + PlayerGuessC; int PlayerProduct = PlayerGuessA * PlayerGuessB * PlayerGuessC; std::cout << "你输入的是:\n" << PlayerGuessA << " " << PlayerGuessB << " " << PlayerGuessC; std::cout << "\n \n 你输入的数字乘积为: " << PlayerProduct; std::cout << "\n 你输入的数字和为: " << PlayerSum; // 修改判断逻辑:只有和和乘积同时正确才判定通关 if (PlayerSum == CodeSum && PlayerProduct == CodeProduct) { std::cout << std::endl << "行啊,有点东西 " << std::endl; return true; } else { std::cout << std::endl << "我早说过了,菜死了" << std::endl; return false; } } int main() { int Lev = 1; while (true) { bool bLevelComplete = PlayGame(Lev); std::cin.clear(); //清除所有错误标识 std::cin.ignore(); //丢弃输入缓冲区剩余内容 // 只有通关成功才提升关卡等级 if (bLevelComplete) { ++Lev; } } return 0; }
内容的提问来源于stack exchange,提问作者Shivang Shukla
相关产品推荐
相关产品推荐

