Кажется, что ваш код чтения и печати работает, но у вашего кода чтения командной строки могут быть некоторые проблемы.
Я запустил ваш код без аргументов командной строки. Следующий код в основном скопирован из вашего основного минуса с получением аргументов командной строки.
int main()
{
double **matrix;
std::string file = "test.dat";
int n = 5;
matrix = new double*[n];
for(int i = 0; i<n; i++)
matrix[i] = new double[n];
for(int j=0; j<n; j++)
for(int i=0; i<n;i++)
matrix[i][j] = 0;
readFile(file, matrix, n);
printMatrix(matrix, n);
return 0;
}
С предоставленным вами вводом я получаю вывод:
20 20 20 20 20
200 20 200 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Однако глядя на код чтения вашей командной строки, я вижу некоторые потенциальные проблемы. Сначала вы используете atoi (). Когда происходит сбой atoi, он возвращает 0. Знаете ли вы, что этот код работает? Все ли правильно инициализируется? Или atoi терпит неудачу на входе, приводя к тому, что n равно 0 и, следовательно, ничего не читается? (Вы можете захотеть заглянуть в струнные потоки для выполнения подобных действий).
Более того, когда argc не равен 6, вы молча терпите неудачу и читаете из неинициализированной глобальной памяти. Эта память является мусором. Вы знаете, что этого не происходит? Если вы просто делаете:
your.exe test.dat 5
тогда 5 не будет считываться из командной строки, потому что argc не равен 6. Всегда ли вы передаете 6 аргументов, как при тестировании? Возможно, нет, потому что в его текущем состоянии вашему коду нужны только имя и размер файла.
Самое главное, посмотрите, получаете ли вы то, что ожидаете от командной строки.
PS Это г ++:
$ g ++ - версия
g ++ (Ubuntu / Linaro 4.4.4-14ubuntu5)
4.4.5 Copyright (C) 2010 Free Software Foundation, Inc. Это бесплатно
программного обеспечения; см. источник для копирования
условия. Там нет гарантии; не
даже для ТОРГОВЛИ или ФИТНЕСА
ДЛЯ ОСОБЕННОЙ ЦЕЛИ.