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

C++字符串数组搜索程序二次搜索返回全部内容问题排查求助

问题原因分析
  • 输入缓冲区换行残留问题
    首次搜索结束后,你使用cin >> again读取用户输入的Y/N选项,该操作只会读取输入流中的单个字符,用户按下回车键产生的\n换行符会残留在输入缓冲区中。
    下一轮循环调用getline(cin, searchIn)时,getline遇到换行符就会终止读取,相当于获取到了一个空字符串作为搜索关键词。空字符串可以被任意字符串的find方法匹配到,所以程序会直接输出数组全部内容。
  • 数组初始化语法错误
    你定义的names数组共有12个元素,但初始化时"Bob Kain, 586-8712"、"Tim Haynes, 586-7676"两个元素末尾缺失逗号,C++会自动将相邻的无分隔字符串拼接,导致实际初始化的元素数量不足12个,剩余元素为空白字符串,同时存在数组越界访问的潜在风险。
  • 非规范写法的潜在隐患
    string::find方法匹配失败时的返回值是标准常量string::npos,虽然多数环境下该常量的值等于-1,但直接和-1对比存在类型不匹配的潜在问题。
修复方案
  1. 读取完again变量后清理输入缓冲区残留的换行符,在cin >> again;后添加如下代码:
// 忽略缓冲区中直到换行符的所有剩余内容,需要引入<limits>头文件
cin.ignore(numeric_limits<streamsize>::max(), '\n');

如果不需要适配超长输入的场景,直接写cin.ignore();也可以解决当前问题。
2. 补全names数组初始化时两个缺失的逗号。
3. 将findPerson函数中的判断条件myArray[index].find(finder) != -1替换为myArray[index].find(finder) != string::npos,符合C++标准规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:45:01