像数组一样传递2D数组值,并且不打印0

时间:2019-07-04 10:48:43

标签: c++

我正在处理这段代码,但我不明白为什么从文件中读取矩阵不会输出正确的矩阵,而是将所有值!= 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

程序应完全打印出我正在从文件中读取的矩阵。

1 个答案:

答案 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'将每个字符转换为数字,并将每个元素添加到其单元格上。