我正在处理这段代码,但我不明白为什么从文件中读取矩阵不会输出正确的矩阵,而是将所有值!= 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";
}
我尝试使用的矩阵是: 3418 0163 0023 0001
程序应完全打印出我正在从文件中读取的矩阵。
答案 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())
{
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";
}
我在这里使用了字符串。矩阵>> x将接受输入直到获得空格或换行符,因此矩阵>> x将在整行中输入x作为字符串。输入后,我遍历字符串,并使用x [j]-'0'将每个字符转换为数字,并将每个元素添加到其单元格上。