2015-04-05 28 views
1

這是我的第一篇文章,所以如果我已經寫了論壇規則或對論壇規則進行了格式化,請顯示一些理解。我也碰巧是C++的新手程序員,所以如果你可以請儘可能簡化寫一些簡化。從文件中讀取值的C++錯誤

我需要閱讀來自名爲的text.txt文件,該文件是這樣的(共13個列)的一些值:

1 2 B5 AA 120 0 100 1.5 1.5 G 0 0 0 \n 
1 2 B6 AB 120 0 100 1.5 1.5 G 0 0 0 \n 
1 2 B7 AC 120 0 100 1.5 1.5 G 0 0 0 \n 
... 

上述文件可以有行的一個不確定的編碼。它是通過其他例程生成的。

我在code :: blocks中創建了一個例程。我做了三個矩陣,將上述數據保存爲整數,雙精度,字符串。我已經減速如下:

int c1, c2, c7, i = 0, nNumPipes; 
double c5, c6, c8, c9, c11, c12, c13; 
string c3, c4, c10; 

int PipeI[][3] = {0}; 
double PipeD[][6] = {0}; 
string PipeS[10000][3]; 

然後我用下面的語法來讀取行:

ifstream inf("C:\\text.txt"); 
while (inf >> c1 >> c2 >> c3 >> c4 >> c5 >> c6 >> c7 >> c8 >> c9 >> c10 >> c11 >> c12 >> c13) 
{ 
    PipeI[i][0] = c1;  
    PipeI[i][1] = c2;  
    PipeS[i][0] = c3;  
    PipeS[i][1] = c4;  
    PipeD[i][2] = c5;  
    PipeI[i][2] = c7;  
    PipeD[i][0] = c8;  
    PipeD[i][1] = c9;  
    PipeS[i][2] = c10;  
    PipeD[i][5] = c11; 
    PipeD[i][3] = c12;  
    PipeD[i][4] = c13;  

    i++; 
} 

nNumPipes = i; 

代碼然而,在這種「而」循環失敗。我想念什麼?

我得到的錯誤消息是一個窗口說「xxx.exe已停止工作」。

任何幫助將不勝感激。

+0

從小開始。分解您的輸入操作,以便每個項目只能讀取一個項目並查看哪個項目失敗。你的'PipeI'和PipeD'聲明沒有意義。您應該構建一個簡短的完整示例,而不是幾個片段。根據你所顯示和描述的代碼,它不應該更長,但它可能指出我們現在看不到的微妙問題。 – 2015-04-05 11:12:18

+0

你可能最好使用[C++標準容器](http://en.cppreference.com/w/cpp/container)(例如'std :: vector <>')和每個數據記錄的結構讀。 – 2015-04-05 11:36:11

+0

另外,'string PipeS [10000] [3]'是在堆棧上分配的相當大量的內存(在我的平臺上是240kB)。這將更好地動態完成,即使用'std :: vector'作爲已經提到的πάνταῥεῖ。 – Carlton 2015-04-05 12:22:03

回答

1

因爲你的陣列PipeI和管道只是一個索引長在他們的第一個括號所以它像

PipeI[1][3]={0}; 
PipeD[1][6]={0}; 

如果你thry來遍歷它你得到的錯誤,你得到這個錯誤。 數組在C++中總是有固定的大小。