<fstream>
будет вашим другом:
Вместо работы с файловыми указателями, вы просто работаете с потоками:
ifstream ifs("matrix1.txt"); // istream is "r"
Вы можете проверить, есть ли у потока проблема
if (!ifs) {
// .. ouch
}
Чтение данных так же просто, как
ifs >> row >> column;
или
ifs >> M.matrix[j][g];
C ++ выводит тип данных, которые вы хотите прочитать, поэтому вам не нужно использовать склонные к ошибкам вручную "%d"
или "%lf"
, которые вам нужны в scanf()
.
Кроме того, он гораздо мощнее, поскольку он всегда вызывает правильную перегрузку потокового экстрактора, если вы создадите экземпляр своей матрицы с T
, представляющим собой нечто иное, чем double
. Например, с Matrix<std::complex<double>>
вы можете прочитать с таким же шаблоном кода такой файл:
2 2
(1.0,1.0) 2.0
(2.5,4) (2.0,1.0)
, где (2.0,1.0)
- стандартное представление комплекса с 2.0 как вещественная часть и 1.0 как мнимая часть.