2014-11-25 48 views
-2

我正在編寫一個程序來輸出矩陣的轉置。當我在矩形或列數多於矩形的矩陣上使用它時,該程序起作用,但當我嘗試在矩陣上使用行數多於列的矩陣時,該程序會產生錯誤的輸出。在C++中計數錯誤

該程序的傑作是它將數字讀入一個矢量,然後將該矢量推到2D矢量data上。在這部分代碼工作正常(據我可以告訴),我認爲錯誤是在這些循環

if (data[0].size() < data.size()) // number of columns < number of rows BREAKS 
{ // test52 gets here 
for(size_t i=0; i<data[0].size(); ++i) // loops over the number of rows 
{ 
    for(size_t j=0; j<data.size(); ++j) // loops over the number of columns (the number of entries in each row) 
    { 
    cout << data[j][i] << "\t"; 
    } 
    cout << endl; 
} 

}

如果我與矩陣

1,2 
3,4 
5,6 
7,8 
9,10 

運行此輸出是1 3 5 7 9,所以它錯過了第二列。

我在編譯和運行時沒有遇到任何錯誤。我一直盯着代碼一個多小時,對於我的生活,我無法弄清楚什麼是錯誤的。

任何幫助,將不勝感激。

編輯

對不起大家,程序工作正常。問題是我試圖讓程序讀取錯誤格式的文本文件(我忘記了逗號)!

謝謝你的幫助。

+2

在調試器中運行,逐行執行代碼,觀察變量(特別是'data [i]'與'data [j]')。 – 2014-11-25 12:13:14

回答

0

更換

i<data[i].size(); 

i<data[0].size(); 
+0

只是試了一下,程序給出了和以前一樣的輸出 – user78655 2014-11-25 12:25:59

+1

_Do not_發佈「完整的代碼」。發佈你的[testcase](http://sscce.org)。 – 2014-11-25 12:39:08

0

此:

for(size_t i=0; i<=data[0].size(); ++i) // loops over the number of rows 

應該是這樣的:

for(size_t i=0; i<data[0].size(); ++i) // loops over the number of rows 

您正在遍歷該向量的末尾,並獲取未定義的行爲