我无法在c ++中将文件中的数字读入2d数组。它读取第一行就好了,但其余的行都填充了0。我不知道我做错了什么。
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int myarray[20][20];
int totRow = 20, totCol = 20, number, product, topProduct = 0, row, col, count;
char element[4];
ifstream file;
file.open( "c:\\2020.txt" );
if( !file )
{
cout << "problem";
cin.clear();
cin.ignore(255, '\n');
cin.get();
return 0;
}
while( file.good())
{
for( row = 0; row < totRow; row++ )
{
for( col = 0; col < totCol; col++ )
{
file.get( element, 4 );
number = atoi( element );
myarray[row][col] = number;
cout << myarray[row][col] << " ";
}
cout << endl;
}
file.close();
}
答案 0 :(得分:3)
如果您的文件中只有数字,则只需使用>>
运算符即可阅读。将内循环更改为:
for( col = 0; col < totCol; col++ )
{
file >> myarray[row][col];
cout << myarray[row][col] << " ";
}
file.get()
的问题是,它不会超出换行符\n
。请参阅:std::basic_istream::get
答案 1 :(得分:2)
你正在关闭while循环中的文件:
while( file.good())
{
for( row = 0; row < totRow; row++ )
{
for( col = 0; col < totCol; col++ )
{
file.get( element, 4 );
number = atoi( element );
myarray[row][col] = number;
cout << myarray[row][col] << " ";
}
cout << endl;
}
file.close(); // <------ HERE
} // end of while loop is here
你显然无法从封闭的流中读取。现在,因为您试图在while
循环的第一次迭代中读取所有数据,这似乎不是您的直接问题。但是请注意,即使您已经读取了所有有意义的数据(例如,如果有一个拖尾的换行符),流仍然可以是good()
,在这种情况下,您将进入第二个循环时间。这是一个错误。