我正在尝试让我的程序正确读取我的输入文件,以下是我的输入文件,第一列是我希望用户输入的,然后需要从相应的行中取出值,值被阅读是错误的。
14,14,8,4.4,16,2.0,1.7,7,4.7,0.23,0.44,290,35016,16,10,0.5,17,2.2,1.8,8,4.4,0.27,0.5,310,370
18,18,11,0.5,18,2.2,2.0,9,6.0,0.30,0.56,320,380
20,20,12,0.5,19,2.3,2.2,9.5,6.4,0.32,0.59,330,390
22,22,13,0.5,20,2.4,2.4,10,6.7,0.33,0.63,340,410
<24> 24,24,0.5,21,2.5,2.5,11,7.4,0.37,0.69,350,42027,27,16,0.6,22,2.6,2.8,11.5,7.7,0.38,0.72,370,450
30,30,18,0.6,23,2.7,3.0,12,8.0,0.40,0.75,380,460
35,35,21,0.6,25,2.8,3.4,13,8.7,0.43,0.81,400,480
40,40,24,0.6,26,2.9,3.8,14,9.4,0.47,0.88,420,500
45,45,27,0.6,27,3.1,3.8,15,10.0,0.50,0.94,440,520
50,50,30,0.6,29,3.2,3.8,16,10.7,0.53,1.00,460,550
ifstream soft;
soft.open ("Softwood.txt"); //Opens the softwood text file which holds the values required for calculations
cout <<"Please enter the strength class of the timber, excluding the letter." <<endl;
cin >> type;
float a [12][13]; //begins the array so the input file can be read
int i, j;
for (i=0; i<12; i++)
{
for (int j=0; j<13; j++)
soft>>a[i][j];
}
int m=0;
while(a[m][0]!= type && m<12)
{
m++;
}
bendingStrength = a[m][1];
tensionParallel = a[m][2];
tensionPerpindicular = a[m][3];
compressionParallel = a[m][4];
compressionPerpindicular = a[m][5];
shearStrength = a[m][6];
elasticityParallel = a[m][7];
elasticityParallelFive = a[m][8];
elasticityPerpindicular = a[m][9];
shearModulus = a[m][10];
density = a[m][11];
meanDensity = a[m][12];
答案 0 :(得分:0)
while(a[m][0]!= type && m<12)
{
m++;
}
如果m == 11,程序会增加m的值(现在m == 12),并尝试将a [12] [i]的值(对于i在1到12之间)赋值给对象。但是在C ++中的数组中,我们从0开始计算对象的数量,因此数组中的最大数字是[11] [12]。您的程序尝试读取不存在的对象的值。
答案 1 :(得分:0)
您应该在阅读文件时忽略逗号。它可以像这样完成:
for (i=0; i<12; i++)
{
for (int j=0; j<13; j++)
{
soft >> a[i][j];
char ch;
soft.get(ch);
if(ch != ',')
soft.unget();
}
}