2012-02-25 24 views
3

ファイルから行列を読み込み、プログラムで使用したいと考えています。しかし、結果を出力すると、正しく読み込まれていないことがわかります。ここ コードである:Cは、整数の行列は、2 3 5値...しかし、私は取得することは+ 061から9.25596テーブルを.txtファイルからC++に読み込む方法

316-9.25596e + 061-9.25596eである

#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; 
} 

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

+1

ここで何かが見つからないかもしれませんが、 'I'と' J'はどこに定義されていますか?あなたはそれらが両方とも0ではないと確信していますか? –

+0

例はコンパイルしないでください。おそらく、 '#define I'などがありません。 –

答えて

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 */ } 
関連する問題