如何将表格从.txt文件读取到C++

How to read a table from .txt file to C++

本文关键字:文件 读取 C++ txt 表格      更新时间:2023-10-16

我想从文件中读取矩阵,并在程序中使用它。但当我输出结果时,它表明它没有正确阅读。这是代码:

#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+06-9.25596e+061-9.25596e+061-9.25596e+061-9-25596e+06-9.25596e+061-9.25596e+061-9.25596e+0.61-9.2596e+061-19.25596e+601-9.25596e-061-9.25596e+061-9.25 596e+061.9-2.25596e+1061-9.25959e+061-95596e+061-9.25596 e+0619-2.25596e+0.61-9.25 596e+0.061-9.25 596e+061

您应该在每个数字后面输出一个空格,否则它们将全部粘在一起。

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

您还应该检查您的输入是否有效。此处未显示(您已经知道如何检查if (! inFile))。

我怀疑您的新行有问题,下面的修改将在读取每一行后忽略新行字符:

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

您似乎正在将未初始化的变量写入输出文件,从而导致未定义的行为。

我怀疑您的C.txt文件不包含您的程序正在查找的5x5矩阵。

您应该添加一个简单的错误检查,例如:

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