2012-02-25 92 views
3

我想從文件中讀取矩陣並在程序中使用它。但是當我輸出結果時,表明它沒有正確讀取。 下面是代碼:如何從.txt文件讀取表格至C++

#define I 5 
#define J 5 
#define P 2 

int i,j,k; //for loops 

int main() 
{ 
    ifstream inFile; 
    ofstream outFile; 
    double C[I][J]; 

    inFile.open("C.txt", ios::in); 
    if (! inFile) { 
     cerr << "unable to open file C.txt for reading" << endl; 
     return 1; 
    } 

    for(i=0; i<I; i++) 
     for(j=0; j<J; j++) 
      inFile >> C[i][j]; 

    outFile.open("results.txt"); 
    outFile<< "C" <<endl; 
    for(i=0;i<I;i++) 
    { 
     for(j=0;j<J;j++) 
      outFile<< C[i][j]; 
     outFile<< endl; 
    } 

    inFile.close(); 
    outFile.close(); 

    return 0; 
} 

C是整數的矩陣值2 3 5 ...但我得到的是

316-9.25596e + 061-9.25596e + 061-9.25596 e + 061-9.25596e + 061 -9.25596e + 061-9.25596e + 061-9.25596e + 061-9.25596e + 061-9.25596e + 061 -9.25596e + 061-9.25596e + 061-9.25596e + 061- 9.25596e + 061-9.25596e + 061 -9.25596e + 061-9.25596e + 061-9.25596e + 061-9.25596e + 061-9.25596e + 061 -9.25596e + 061-9.25596e + 061-9.25596e + 061- 9.25596e + 061-9.25596e + 061

+4

一般而言,這將方便向我們展示你的輸入是什麼,你的輸出是什麼,你所期望的吧。 – Bart 2012-02-25 20:31:00

+1

我可能會在這裏丟失一些東西,但是'I'和'J'定義在哪裏?你確定它們不等於0嗎? – 2012-02-25 20:31:32

+0

你的例子不應該編譯。它可能錯過了#定義I,等等。 – 2012-02-25 20:32:37

回答

2

我懷疑你有與新生產線的問題,下面的修改將讀取每一行後忽略換行字符:

for(i=0; i<I; i++) { 
    for(j=0; j<J; j++) 
     inFile >> C[i][j]; 
    inFile.ignore(); /// <<<-------- 
} 
3

你應該輸出的每個數字後的空白,否則他們將全部粘在一起。

outFile<< C[i][j] << " "; 

你也應該檢查你的輸入的有效性。沒有在這裏顯示(你已經知道如何檢查if (! inFile))。

2

看來你正在向輸出文件寫入未初始化的變量,導致未定義的行爲。

我懷疑你的C.txt文件沒有包含你的程序正在尋找的5x5矩陣。

您應該添加一個簡單的錯誤檢查,例如:

for(i=0; i<I; i++) 
    for(j=0; j<J; j++) 
     if (!(inFile >> C[i][j])) { /* something's wrong here */ }