为何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
相关产品推荐
相关产品推荐

