簡體   English   中英

循環c ++奇怪行為的條件

[英]condition for loop c++ odd behavior

我有一個關於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;
  }

它確實可以正常工作。 但是,如果我更改了任何內容,那么它將變成一個無限循環,並且我不知道會發生什么

當您進行空初始化時,至少對於我使用過的大多數編譯器,j都會初始化為存儲在其存儲空間中的任何值。 由於您遞增j,所以我假設您沒有在循環中對其進行初始化,因此您可能需要將j = 0或其他對您的程序有意義的值放進去。

至於第二個循環總是循環的,我看到編譯器設置了初始化的int,而沒有為int的最大可能值(2,147,483,647)分配任何值,即使沒有做很多事情,循環也將花費很長時間,並且看起來無限循環

采用 :

int j=0;

代替

int j;

並檢查for循環中的函數是否更改了使循環無限的iij的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM