我正在处理此代码,我不明白为什么从文件中读取矩阵不会输出正确的矩阵,而只是将所有值推入所有值!= 0一个阵列,不打印0。谢谢。
#include <iostream>
#include <fstream>
#include <array>
using namespace std;
#define M 4
#define N 4
int** inputArray();
void printArray(int** matrix);
int main()
{
int **matrix;
matrix = inputArray();
printArray(matrix);
return 0;
}
void printArray(int** matrix)
{
for (int i=0; i<M; i++)
{
for(int j=0; j<N; j++)
{
cout << matrix[i][j];
}
cout << endl;
}
}
int** inputArray()
{
int** matrix=new int*[N];
int value;
ifstream matrice("matrix.txt");
if (matrice.is_open())
{
do
{
for (int i=0; i<N; ++i)
{
matrix[i]=new int[M];
for(int j=0; j<M; j++)
{
matrice >> matrix[i][j];
//cout << matrix[i][j];
}
}
}
while (matrice>>value);
matrice.close();
return matrix;
}
else cout << "Unable to open file";
}
我尝试使用的矩阵是:3418016300230001
该程序应精确打印出我正在从文件中读取的矩阵。
您的输入处理方式是错误的!由于一排中的每个元素都不被空间分开,因此应将输入作为字符串或字符。
例如:
#include <iostream>
#include <fstream>
#include <array>
using namespace std;
#define M 4
#define N 4
int** inputArray();
void printArray(int** matrix);
int main()
{
int **matrix;
matrix = inputArray();
printArray(matrix);
return 0;
}
void printArray(int** matrix)
{
for (int i=0; i<M; i++)
{
for(int j=0; j<N; j++)
{
cout << matrix[i][j];
}
cout << endl;
}
}
int** inputArray()
{
int** matrix=new int*[N];
int value;
ifstream matrice("matrix.txt");
if (matrice.is_open())
{
for (int i=0; i<N; ++i)
{
string x;
matrice>>x;
matrix[i]=new int[M];
for(int j=0; j<M; j++)
{
matrix[i][j]=x[j]-'0';
//cout << matrix[i][j];
}
}
matrice.close();
return matrix;
}
else cout << "Unable to open file";
}
我在这里使用了字符串。Matrice>> x将输入直到获得空白或纽线为止。输入后,通过字符串迭代并使用x [j] - '0'将每个字符转换为数字,并在其单元格上添加了每个元素。