Как прочитать таблицу из файла .txt в C ++ - PullRequest
3 голосов
/ 26 февраля 2012

Я хочу прочитать матрицу из файла и использовать ее в моей программе. но когда я вывожу результаты, это показывает, что он не читает правильно. Вот код:

#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.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-9.25596e + 061

Ответы [ 3 ]

3 голосов
/ 26 февраля 2012

Вы должны выводить пробелы после каждого числа, иначе они будут склеены.

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

Вам также следует проверить правильность ввода. Не показывать здесь (вы уже знаете, как проверить if (! inFile)).

2 голосов
/ 26 февраля 2012

Кажется, вы записываете неинициализированные переменные в выходной файл, что приводит к неопределенному поведению.

Я подозреваю, что ваш C.txt файл не содержит матрицу 5x5, которую ищет ваша программа.

Вы должны добавить простую проверку ошибок, например ::1006

for(i=0; i<I; i++)
    for(j=0; j<J; j++)
        if (!(inFile >> C[i][j])) { /* something's wrong here */ }
2 голосов
/ 26 февраля 2012

Я подозреваю, что у вас проблемы с новыми строками, ниже модификация будет игнорировать символ новой строки после прочтения каждой строки:

for(i=0; i<I; i++) {
    for(j=0; j<J; j++)
        inFile >> C[i][j];
    inFile.ignore();  /// <<<--------
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...