0

テスト ファイルから数値を読み取り、それらをマトリックスに表示しようとしています。テキスト ファイルには、1 行に 1 つの数字があります。最初の 2 行は行列の次元です (3 と 4) これらの数値の実際のデータ値を行列に割り当てるのに問題があります。この場合、値は 2 から 14 です。

#include <iostream>
#include <fstream>
#include <iomanip>
#include <stdlib.h> 
using namespace std;
#include "Matrix.h"

int main()
{
        CMatrix A(10,10); //set to arbitrary size
        int x;
        int i = 0;
        int number;
        int rowsFile;
        int columnsFile;

        while ( myFile.good()&& myFile.is_open() )
        {
            myFile>>x;  
            if (i==0){ //for row dimension
                rowsFile = x; 
            }

            if (i==1){ //for column dimension
                columnsFile = x;
            }
            cout<<"Value "<<i<<": "<<x<<endl; //displays the values


            if (i>=2){
                for (int r = 0; r < rowsFile; r++)
                {
                    for (int c = 0; c < columnsFile; c++)
                    {
                        A.Value(r,c) = x;
                        myFile>>x;  
                    }
                }
                myFile.close();
            }


            i=i+1;
        }
        myFile.close();

        CMatrix A(rowsFile, columnsFile);
        cout<<endl<< "Rows: "<<A.getNumberOfRows()<<endl;
        cout<< "Columns: "<<A.getNumberOfColumns()<<endl;
        cout<<endl<<A.ToString();
}

これが私の出力の表示です。 ここに画像の説明を入力

何らかの理由で、コメントアウトされたループが機能していないようです。どんな助けでも大歓迎です。ありがとうございました!

4

2 に答える 2

1

このコードを再構成して、読み取り直後に double を行列要素に配置することをお勧めします。

file io コードは完璧ではないかもしれませんが、要素の値を処理するループから行数と列数の読み取りを分離します。

// do not declare i here
int numRows;
int numCols;

std::fstream inputFile("filename", std::in);

if ! (inputFile >> numRows >> numCols) 
{
    // Handle error 
}

// Check that numRows and numCols are acceptable (positive)
// [not shown] 

CMatrix A(numRows, numCols);
if (inputFile)
{
    int elementsRead = 0;
    for (int i = 0; i < numRows; i++)
    {
        for (int j = 0; j < numCols; j++)
        {
            double x;
            if (inputFile >> x)
            { 
                A.Value(i,j) = x;
                ++elementsRead;
            } else {
                // probably an error from too-short file, 
                // token could not be converted to double, etc.
                // handle appropriately
                break;  
            }
        }
    }
}

if (elementsRead != numRows * numCols)
{
    // handle error
}

// Use matrix A
于 2013-11-03T21:14:07.013 に答える