我对c ++中for循环中的变量范围有疑问。 我有一个变量j来计算某个条件,如下面的代码所示
int j;
for (int i=0; i<8; i++){
if ((betaSol(i,0) >= -HalfPi) && (betaSol(i,0) <= HalfPi)){
// j gives size of new vector where beta is within bounds
j++;
}
}
Eigen::MatrixXd vectorname(j,1);
现在我想在下一个for循环的条件下使用相同的j,如下所示
for (int ii = 0; ii<j; ii++ ){
vectorname(ii,0) = functionname(alphaSol_filt(ii,0),betaSol_filt(ii,0));
}
以下是问题发生的地方。 这成为一个无限循环,ii超出界限。奇怪的是,当我用以下内容替换第二个循环时:
for (int ii = 0; ii<j; ii++ ){
std::cout << j <<std::endl;
}
它确实可以正常工作。但是,如果我改变任何东西,那么它就变成了一个无限循环,我不知道会发生什么
答案 0 :(得分:0)
当你有一个空的初始化时,j被初始化为它存储在存储空间中的任何值,至少对于我使用过的大多数编译器来说。因为你增加j我假设你没有在循环中初始化它,所以你可能需要把j = 0,或者其他一些对你的程序有意义的值。
至于第二个循环总是循环,我看到编译器设置初始化的int没有赋值为int的最大可能值(2,147,483,647),这需要很长时间才能循环,即使没有做太多的事情也是如此。看起来像是一个无限循环。
答案 1 :(得分:0)
使用:
int j=0;
而不是
int j;
并检查for
循环中的函数是否会更改使循环无限的ii
或j
的值。