Это мой первый пост здесь. Я работал над этим вопросом C ++ некоторое время и не получил нигде. Может быть, вы, ребята, можете дать мне несколько советов, чтобы начать меня.
Моя программа должна читать два файла .txt, каждый из которых содержит одну матрицу. Затем он должен умножить их и вывести в другой файл .txt. Однако я не совсем понимаю, как настроить файлы .txt и как получить размеры. Вот пример матрицы 1.txt.
#ivalue #jvalue value
1 1 1.0
2 2 1
Размерность матрицы составляет 2х2.
1.0 0
0 1
Прежде чем я смогу начать умножение этих матриц, мне нужно получить значения i и j из текстового файла. Единственный способ сделать это —
int main()
{
ifstream file("a.txt");
int numcol;
float col;
for(int x=0; x<3;x++)
{
file>>col;
cout<<col;
if(x==1) //grabs the number of columns
numcol=col;
}
cout<<numcol;
}
Проблема в том, что я не знаю, как добраться до второй строки, чтобы прочитать количество строк. Кроме того, я не думаю, что это даст мне точные результаты для других файлов матриц.
Дайте мне знать, если что-то неясно.
ОБНОВИТЬ
Спасибо!
Я заставил getline работать правильно. Но сейчас я сталкиваюсь с другой проблемой. В матрице B это выглядит так:
#ivalue #jvalue Value
1 1 0.1
1 2 0.2
2 1 0.3
2 2 0.4
Мне нужно сообщить программе, что она должна идти на 4 строки, может быть, даже больше (размеры матриц неизвестны. Мой пример матрицы B — 2×2, но это может быть 20×20). У меня есть цикл while (! File.eof ()), чтобы он мог зацикливаться до конца файла. Я знаю, что мне нужен динамический массив для умножения, но нужен ли он и здесь?
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream file("a.txt"); //reads matrix A
while(!file.eof())
{
int temp;
int numcol;
string numrow;
float row;
float col;
for(int x=0; x<3;x++)
{
file>>col;
if(x==1)
{
numcol=col; //number of columns
}
}
string test;
getline(file, test); //next line to get rows
for(int x=0; x<3; x++)
{
file>>test;
if(x==1)
{
numrow=test; //sets number of rows
}
}
cout<<numrow;
cout<<numcol<<endl;
}ifstream file1("b.txt"); //reads matrix 2
while(!file1.eof())
{
int temp1;
int numcol1;
string numrow1;
float row1;
float col1;
for(int x=0; x<2;x++)
{
file1>>col1;
if(x==1)
numcol1=col1; //sets number of columns
}
string test1;
getline(file1, test1); //In matrix B there are four rows.
getline(file1, test1); //These getlines go down a row.
getline(file1, test1); //Need help here.
for(int x=0; x<2; x++)
{
file1>>test1;
if(x==1)
numrow1=test1;
}
cout<<numrow1;
cout<<numcol1<<endl;
}
}
«Проблема в том, что я не знаю, как добраться до второй строки, чтобы прочитать количество строк».
использование std::getline
чтобы перейти к следующей строке.
std::string first_line;
std::getline( file, first_line );
Других решений пока нет …