我的c ++程序不会从命令行读取多个文件

时间:2015-09-28 11:45:12

标签: c++ matrix command-line command-line-arguments matrix-multiplication

我有一个c ++程序,用于读取表示矩阵的两个文件。它只会读取其中一个文件。这两个文件只包含一个浮点矩阵。该程序用于读取两个矩阵并将它们相乘并将结果打印到命令行。这是该程序的代码。

#include <fstream>
#include <iostream>

using std::cin;
using std::cout;
using std::cerr;
using std::endl;
using std::ofstream;

#include <math.h>
#include <stdlib.h>

void readArr(int, int, double **);
void multArrs(int, double **, int, double **, int, double **);
void printResult(int, double **, int);

int main(int argc, char *argv[])
{
  //read in the number of rows and columns
  int ar = atoi(argv[1]);
  int ac = atoi(argv[2]);
  int br = atoi(argv[3]);
  int bc = atoi(argv[4]);

  if (ac != br)
  {
    cerr<< "Matrix dimensions mismatch; exiting.\n";
    exit(-1);
  }

  // reserve space for the three arrays
  double **A = new double*[ar]; // each el. of this points to a row of A
  for (int i = 0; i < ar; i++)
    A[i] = new double[ac];  // a row of 'ac' floats

  double **B = new double*[br];
  for (int i = 0; i < br; i++)
    B[i] = new double[bc];  // a row of 'bc' floats

  double **C = new double*[ar];
   for (int i = 0; i < ar; i++)
    C[i] = new double[bc];  // each el. of this points to a row of C

  readArr(ar, ac, A);
  readArr(br, bc, B);
  multArrs(ar, A, bc, B, ac, C);
  printResult(ar, C, bc);


}
//read in the matrix from the command line
void readArr(int r, int c, double **arr)
{
for (int i = 0; i < r; ++i) {
    for (int j = 0; j < c; ++j) {
        std::cin>> arr[i][j];
        cout << " \n" << arr[i][j];
    }
}
}

void multArrs(int ar, double **A, int bc, double **B, int br, double **C)
{
    for(int i=0; i<ar; ++i)
    for(int j=0; j<bc; ++j)
    for(int k=0; k<br; ++k)
    {
        C[i][j]+=A[i][k]*B[k][j];
    }
}

void printResult(int r1, double **C, int c1)
{
cout << endl << "Output Matrix: " << endl;
    for(int i=0; i<r1; ++i)
    for(int j=0; j<c1; ++j)
    {
        cout << " " << C[i][j];
        if(j==c1-1)
            cout << endl;
    }
}

使用以下命令运行程序:./matmult 3 3 3 3 <matrix1 <matrix2 它只会读入matrix2并将其放在第一个双数组中,然后第二个双数组只包含0&#39; s。矩阵文件如下所示:

2.0 3.0 1.0
6.0 2.0 2.0
7.0 3.0 5.0

感谢您提供的任何见解。我试过寻找答案,但我找不到答案。还必须使用&lt;读取矩阵。矩阵1

2 个答案:

答案 0 :(得分:2)

通过这种方式,您只能传递一个输入文件,因为它是标准输入的重定向。所以这就是为什么程序只读取第二个矩阵,因为它只读取最后一个语句。请使用文件名作为参数并在源代码中打开文件或将两个文件合并为一个。

答案 1 :(得分:0)

由于您正在为此使用特定于shell的功能,因此两个重定向后,最好知道您正在使用的操作系统和shell。我会改用文件名作为参数,并从程序中打开文件。