C++中SplashKit库改名函数逻辑异常问题求助
修复C++ SplashKit改名函数的数组遍历问题
问题根源
- 原代码注释掉了遍历数组的
for循环,仅检查数组第一个元素,导致无法匹配后续位置的名字 - 即使启用循环,原逻辑会在遇到第一个不匹配元素时就提示错误,而非遍历完所有元素后统一判断是否存在
修复后的代码
void change_name(string names[], int size) { // 标记是否找到目标名字 bool found = false; string target_name, new_name; // 提示用户输入要修改的名字 write_line("Which name would you like to change: "); target_name = read_string(" Name: "); // 遍历整个数组查找目标名字 for (int i = 0; i < size; i++) { if (target_name == names[i]) { // 找到匹配项,输入新名字并替换 write_line("Please enter the new name: "); new_name = read_string(" New Name: "); names[i] = new_name; found = true; // 若只需要修改第一个匹配项,可跳出循环;允许多个同名修改则删除break break; } } // 遍历结束后判断是否找到,未找到则提示错误 if (!found) { write_line("抱歉,该值与列表中的任何值都不匹配,请重试"); } }
关键修改说明
- 新增
found布尔变量,用于记录是否在数组中找到目标名字 - 使用参数
size遍历数组,替代硬编码的SIZE,提升函数通用性 - 拆分输入逻辑,明确区分目标名字和新名字的变量,避免混淆
- 仅在遍历完所有元素后统一判断是否提示错误,避免中途误报
- 找到匹配项后标记状态并修改,可选跳出循环提升执行效率
内容的提问来源于stack exchange,提问作者Sourabh Beniwal
相关产品推荐
相关产品推荐

