文件阅读和存储数字

时间:2017-04-22 01:12:02

标签: c++

我正在开发一个程序,它将读取文件的第一个数字,创建该大小的数组,然后读取第二个文件,然后创建另一个大小的数组。然后,它将使用第一个文件中的值填充第一个数组,然后使用第二个文件中的值填充第二个数组。我已经完成了大部分工作,但我无法弄清楚如何在文件中获取第一个数字。有人能帮我吗?

int main()
{

    //int a[][],b[][],i,j,k,s,r;

    ifstream inFile1,inFile2;
    inFile1.open ("mat1.txt");
    inFile2.open ("mat2.txt");

    inFile1 >> n;
    for(i=0;i<n;++i)
    for(j=i;j<n;++j)
    inFile1 >> a[i][j];

    inFile2 >> n;
    for(i=0;i<n;++i)
    for(j=i;j<n;++j)
    inFile2 >> b[i][j];


    inFile1.close();
    inFile2.close();
    return 0;
}

2 个答案:

答案 0 :(得分:0)

这是你从文件中读取的方式,你可以用它来阅读整个文件或只是其中的一部分:

fgets是用于从文件中读取的内容

   const int maxString = 1024;  // put a limit for your buffer

   printf("reading file\n");
    char buf[maxString];  /* make a buffer to store what your reading from 
                            the file*/
    FILE * fr = fopen(fn, "r");  // open the file
    while(fgets(buf, maxString, fr))  /* fgets reads the file and writes it 
                                         to buffer*/
    {
        fputs(buf, stdout); /*see what it is reading*/
    }

    fclose(fr); // close the file
    remove(fn); // if you want to remove the file when your done reading

或者可能做这样的事情:

string line;
 //while there is a line to get
while( getline( fileIn, line))
{
  firstCharacter = line[0]; // access the first character
}

答案 1 :(得分:0)

我并不完全清楚你想从这个问题中得到什么,但是我假设你想从两个不同的文件中读取一个n x n数组,其中n在文件打开之前是未知的。下面的代码应该这样做。

注意使用i*n1 + j来声明一个只在运行时已知的大小的数组,以及稍微笨拙的索引/* // mat1.txt 3 1 2 3 4 5 6 7 8 9 */ /* // mat2.txt 4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 */ #include <iostream> #include <fstream> using namespace std; int main() { int n1, n2; ifstream inFile1,inFile2; inFile1.open ("mat1.txt"); inFile2.open ("mat2.txt"); inFile1 >> n1; int* file1contents = new int[n1*n1]; for(int i=0; i<n1; ++i) { for(int j=0; j<n1; ++j) { inFile1 >> file1contents[i*n1 + j]; } } inFile2 >> n2; int* file2contents = new int[n2*n2]; for(int i=0; i<n2; ++i) { for(int j=0; j<n2; ++j) { inFile2 >> file2contents[i*n2 + j]; } } // Print file contents to check it worked cout << "File 1, size: " << n1 << ", contents:" << endl; for(int i=0; i<n1; ++i) { for(int j=0; j<n1; ++j) { cout << file1contents[i*n1 + j] << ","; } cout << "\n"; } cout << endl; cout << "File 2, size: " << n2 << ", contents:" << endl; for(int i=0; i<n2; ++i) { for(int j=0; j<n2; ++j) { cout << file2contents[i*n2 + j] << ","; } cout << "\n"; } cout << endl; delete [] file1contents; delete [] file2contents; inFile1.close(); inFile2.close(); return 0; } 等。这是因为c ++标准(或者至少早期的那些)不支持可变长度数组...事实证明它们在我的编译器上工作正常,但我知道不能保证它们适用于所有编译器(参见here)。另一种方法是使用向量而不是数组。

此代码中还有很多重复内容,因此您可能更好地将重复内容放入函数中。

{{1}}