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