我被赋予了创建代码以从2个.txt文件读取到2个5 * 5阵列的任务。我一直在检查各个部分的代码,看它是否有效,我将.txt文件中的数据存储到我的2个数组中没有问题,问题是我现在要将2个数组用作矩阵并将它们相乘创建一个3阵列/矩阵。我一直在网上和论坛上搜索如何做到这一点,我根据我发现的内容创建了下面的代码。我的代码看起来很合理(虽然我来到c ++时我是新手)但是当我尝试显示我的数组3时,我得到了奇怪的输出。
using namespace std;
#include<iostream>
#include<fstream>
#include<string>
int main ()
{ int count1,count2;
int i,j,m,n;
int myarray1[5][5];
int myarray2[5][5];
int myarray3[5][5];
string file1,file2,mystring1,mystring2;
cout<<"please enter the name of the first file"<<endl;
cin>>file1;
cout<<"please enter the name of the second file"<<endl;
cin>>file2;
ifstream inFile;
inFile.open(file1.c_str());
for (count1=0;count1<26;++count1)
{
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
while (!inFile.eof())
{
getline(inFile,mystring1,',');
int value1 = atoi(mystring1.c_str());
myarray1[i][j]=value1;
cout<<myarray1[i][j];
}
}
}
}
system("pause");
inFile.close();
system("pause");
inFile.open(file2.c_str());
for (count2=0;count2<26;++count2)
{
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
while (!inFile.eof())
{
getline(inFile,mystring2,',');
int value2 = atoi(mystring2.c_str());
myarray2[i][j]=value2;
cout<<myarray2[i][j];
}
}
}
}
inFile.close();
system("pause");
for(m=0;m<5;m++)
{
for(n=0;n<5;n++)
{
myarray3[m][n]=(myarray1[0][m]*myarray2[n][0])
+(myarray1[1][m]*myarray2[n][1])
+(myarray1[2][m]*myarray2[n][2])
+(myarray1[3][m]*myarray2[n][3])
+(myarray1[4][m]*myarray2[n][4]);
cout<<myarray3[m][n]<<endl;
}
system("pause");
}
这是我得到的输出:
please enter the name of the first file
C:\matrix1.txt
please enter the name of the second file
C:\matrix2.txt
1234554321234543212345432Press any key to continue . . .
Press any key to continue . . .
5678923412457892562112345Press any key to continue . . .
-1546188214
1030792152
1030792152
1030792152
1030792152
-1546188228
-858993456
-858993456
-858993456
-858993456
-1546188228
-858993456
-858993456
-858993456
-858993456
-1546188228
-858993456
-858993456
答案 0 :(得分:0)
使用此文件从文件中获取输入。希望这可以工作
ifstream inFile;
inFile.open(file1.c_str());
i=0; j=0;
while (getline(inFile,mystring1))
{
int val=0;
for(int k=0; k<mystring1.size(); k++)
{
if(mystring1[k]==',')
{
myarray1[i][j++]=val;
val=0;
continue;
}
val =val*10+mystring1[k]-48;
}
myarray1[i][j++]=val;
i++;
j=0;
}
inFile.close();
答案 1 :(得分:0)
另一个答案已经解决了乘以矩阵的逻辑错误。我想指出我在阅读矩阵代码时遇到的问题。
你有:
for (count1=0;count1<26;++count1)
{
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
while (!inFile.eof())
{
getline(inFile,mystring1,',');
int value1 = atoi(mystring1.c_str());
myarray1[i][j]=value1;
cout<<myarray1[i][j];
}
}
}
}
我不知道在哪里尝试使用外循环:
for (count1=0;count1<26;++count1)
如果您的文件中有足够的数据,您最终会从文件中读取26 x 5 x 5
个数字。由于您的文件中只有5 x 5
矩阵的数据,因此您可以完全删除外部循环。