2016-07-28 142 views
4

我有一小段代碼從Matlab轉移到C++。將代碼從Matlab移植到C++

但是,當我試圖從我的結果數組中顯示值時,值和運行時錯誤發生了巨大變化。

XR2和YR2是具有7202個元素的數組。在代碼之後它們變成了3201個元素。

MATLAB代碼:

XR = so(1,:); 
YR = so(2,:); 
XR2 = XR; 
YR2 = YR; 
i = 1; 
j = 1; 

while(i<=numel(YR2)) 
    if(i>1) 
     if(XR2(i)>0 && XR2(i-1)<0) 
      j = i; 
     end 
    end 
    if(YR2(i)<0.0) 
     YR2(i) = []; 
     XR2(i) = []; 
     i = i - 1; 
    end 
    i = i +1; 
end 

C++代碼:

#include <iostream> 
#include <fstream> 
void main() 
{ 

vector<double> XR2(7202); 
vector<double> YR2(7202); 
ifstream myReadFile1, myReadFile2; 
int h=0; 
myReadFile1.open("XR.txt"); 
myReadFile2.open("YR.txt"); 
while (!myReadFile1.eof()) 
{ 
    myReadFile1 >> XR2[h]; 
    ++h; 
} 
myReadFile1.close(); 
h=0; 
while (!myReadFile2.eof()) 
{ 
    myReadFile2 >> YR2[h]; 
    ++h; 
} 
myReadFile2.close(); 

int i = 0; 
int j = 0; 

while (i < XR2.size()) 
{ 
    if (i > 0) 
    { 
     if ((XR2[i]>0) && (XR2[i-1]<0)) 
     { 
      j = i; 
     } 
    } 
    if (YR2[i]<0.0) 
    { 
     YR2.erase(YR2.begin() + i); 
     XR2.erase(XR2.begin() + i); 
     --i; 
    } 
    ++i; 
} 
} 

當我嘗試顯示來自YR2 C++中的值,我得到運行時錯誤和錯誤之前顯示的值也與預期的結果不同。

鏈接到輸入數據(XR和YR)和期望的輸出數據(XR2和YR2)。數據在文本文件中。

https://www.dropbox.com/sh/uy4cxi67rm9dspr/AAApawshcLxa1h0LfBC_rnLla?dl=0

+1

確定thatt的MATLAB代碼調試實際上有關你的C++代碼?我寧願投入時間爲你的C++代碼提供[MCVE](你沒有)。這對幫助你更重要,而不是看到正在運行的matlab代碼。 –

+0

我可以在matlab循環之前和之後附加數據文件(這是一個簡單的1維數組)。我在C++循環之前將相同的值添加到XR2和YR2。 –

+0

您是否閱讀過鏈接製作MCVE所需的實際內容?所有後期可編譯代碼中的第一個,輸入和預期輸出也很有幫助。 –

回答

1

讀貼的代碼,在我看來,該OP可以簡單地動態創建的最終載體,只需要添加想要的值。

假設發佈的邏輯是所有什麼OP的需求,一個完整的程序,讀取原始文件,並把修剪輸出可以是這樣的:

#include <iostream> 
#include <vector> 
#include <string> 
#include <fstream> 
#include <iomanip> 

int main() 
{ 

    std::vector<double> XR2, 
         YR2; 

    std::ifstream ifile_xr("XR.txt"), 
        ifile_yr("YR.txt"); 
    if (!ifile_xr || !ifile_yr) { 
     std::cout << "Error: unable to open input files.\n"; 
     return EXIT_FAILURE; 
    } 

    double x, y; 
    while (ifile_xr >> x && ifile_yr >> y) 
    { 
     if (y >= 0.0) 
     { 
      XR2.push_back(x); 
      YR2.push_back(y); 
     } 
    } 

    std::ofstream ofile_xr("XR2.txt"), 
        ofile_yr("YR2.txt"); 
    if (!ofile_xr || !ofile_yr) { 
     std::cout << "Error: unable to open output files.\n"; 
     return EXIT_FAILURE; 
    } 

    for (size_t i = 0; i < XR2.size(); ++i) { 
     ofile_xr << std::setprecision(15) << XR2[i] << '\n'; 
     ofile_yr << std::setprecision(15) << YR2[i] << '\n'; 
    } 

    return EXIT_SUCCESS; 
}