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

为何while循环中v.push_back()未读取数据?无法打印vector元素及大小?

你的C++代码问题分析与修复方案

咱们逐个拆解你的问题,先揪出代码里的核心逻辑漏洞:

问题1:while循环中v.push_back()无法执行的原因

你的push_back只有在n能被k整除且k<10时才会触发,但存在两种情况会导致它完全不执行,甚至让程序卡死:

  • 情况1:n是大于9的质数(比如输入n=11):k从2递增到9,都没法整除n,之后k变成10,此时两个if的k<10条件都不成立,循环体里啥也不做,n始终不等于0,程序直接陷入死循环,永远到不了push_back的执行时机。
  • 情况2:n被分解到1后(比如输入n=8,分解完n变成1):n!=0依然满足循环条件,k从当前值(比如2)递增到10,之后同样进入死循环,不会再执行任何push操作。

要是输入n=1,从一开始就会触发死循环,vector全程为空。

问题2:无法打印vector元素、获取大小的原因

本质是程序根本没走到输出代码那一步!因为while循环陷入了死循环,程序一直卡在循环体里,永远跳不到cout<<v.size()和后续的for循环部分。只有当循环正常退出时,才会执行后面的输出逻辑。

修复后的代码

我们补充两个关键判断,既能避免死循环,又能处理无法分解的剩余n:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,k=2;
    cin>>n;
    vector<int>v;
    // 当n大于1时才继续分解,n=1时直接退出循环
    while(n>1){
        if((n%k==0)&&(k<10)){
            n=n/k;
            v.push_back(k);
        } else if(k<10){
            k++;
        } else {
            // k>=10时,说明剩下的n是大于9的质数,直接加入vector后退出
            v.push_back(n);
            break;
        }
    }
    cout<<v.size()<<"\n";
    for(int i=0;i<v.size();i++){
        cout<<v[i]<<" ";
    }
}

修复点说明:

  • 把循环条件从n!=0改成n>1:n=1时已经没有分解必要,直接退出循环。
  • 新增k>=10的分支:此时剩下的n没法被2-9整除,必然是大于9的质数,直接加入vector后退出循环,避免死锁。

修改后不管输入质数、合数还是1,程序都能正常执行push_back,并顺利输出vector的大小和元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:08:12