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

C++统计句子最长单词长度的代码运行中途停止,如何排查原因?

运行卡住的根本原因
  • 死循环漏洞:当遍历到空格或者字符串结束符\0时,代码仅更新了长度统计值,没有对遍历下标i执行递增操作,会一直停留在当前位置重复判断,永远无法推进遍历也无法跳出循环。
  • 结束逻辑失效:字符串结束符\0的判断被放在了else分支,而a[i] == '\0'已经被第一个if条件捕获,永远不会触发else分支里的break语句,就算走到字符串末尾也不会结束循环。
  • 其他潜在问题:char a[n+1]是C语言的可变长度数组特性,不属于C++标准语法,部分编译器会编译失败;cin.getline(a,n)执行后额外调用的cin.ignore()属于冗余操作。
修复后可正常运行的代码
#include<iostream>
using namespace std;
    
int main(){
    int n;
    cin>>n;
    cin.ignore();
    // 改用动态分配数组符合C++标准,也可直接用std::string简化实现
    char* a = new char[n+1];
    cin.getline(a, n+1);
    
    int i=0;
    int currLen=0, maxLen=0;
    
    while(true){
       if(a[i]==' ' || a[i]=='\0'){
          if(currLen>maxLen){
              maxLen=currLen;
          }
          currLen=0;
          // 匹配到结束符直接跳出循环
          if(a[i] == '\0'){
              break;
          }
          // 空格场景下标后移,避免死循环
          i++;
       }
       else{
           currLen++;
           i++;
       }
   }
   cout<<maxLen<<endl;
   delete[] a;
   return 0;
}
核心修改说明
  • 空格匹配分支新增i++,确保遍历正常推进不会卡住
  • 结束符判断和break逻辑移到if分支内,确保走到字符串末尾可以正常终止循环
  • 替换可变长度数组为动态内存分配写法,符合C++标准,兼容性更强
  • 调整cin.getline传入长度为n+1,匹配数组实际容量可以完整读取输入
  • 移除冗余的cin.ignore()调用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:48:01