循环中整数赋值后迭代重置为初始值问题排查求助
问题根源:变量作用域冲突
你遇到的问题核心是同名变量的作用域屏蔽——简单说就是你在循环内部重新定义了一个和外部同名的k,导致每次循环里修改的都不是你一开始声明的那个k。
我们来拆解代码里的问题:
- 在
main函数开头,你声明了全局于main的int k=0;,这个变量本来应该在整个循环中被持续修改。 - 但在循环内部,你写了
int k=z;——这行代码不是给外部的k赋值,而是创建了一个新的、仅在当前循环迭代中有效的局部k变量,它会暂时“屏蔽”外部的k。 - 当当前循环迭代结束后,这个内部的
k就会被销毁,外部的k自始至终都没被修改过,所以下一次循环开始时它还是初始值0。
修正后的代码
只需要移除循环内部k前面的int,直接赋值即可:
#include <iostream> using namespace std; int main() { int t,n,z=0; int k=0; cin>>t; for(int i=0;i<t;i++){ cout<<"k before="<<k<<endl; int z=i+2+k; k=z; // 不再重新定义k,直接修改外部的k变量 cout <<"k after="<<k<<endl; cout <<z<<endl; } }
修正后的运行效果(以t=3为例)
输入3后,输出会变成:
k before=0 k after=2 2 k before=2 k after=5 5 k before=5 k after=9 9
这样k就会在每次循环中持续累加,不会被重置了。
内容的提问来源于stack exchange,提问作者ADITYA SHRIVASTAVA
相关产品推荐
相关产品推荐

