2013-12-11 151 views
0

我有这个程序从数据文件中获取属性并将它们输入到程序的计算中。这是我此刻的代码,但它没有采取任何价值了进去..任何帮助表示赞赏如何将数据从文件读取到数组中

float woodcharacStrength(){ 
    myInfile.open ("strength_classes.txt");  //inputs external file that contains characteristic values for forces parallel to grain. 

    for (row = 0; row<3; row++) 
     for (col = 0; col<18; col++)   //condition to only read certain rows and columns of the input file 
     { 
myInfile >> arraylocation[row][col];  //used to define each value of the array 
     } 

switch(woodType){ 
    case 'A': 
    case 'a': ftk = arraylocation[0][0]; fck = arraylocation[1][0];break; 
    case 'B': 
    case 'b': ftk = arraylocation[0][1]; fck = arraylocation[1][1];break; 
    case 'C': 
    case 'c': ftk = arraylocation[0][2]; fck = arraylocation[1][2];break; 
    case 'D': 
    case 'd': ftk = arraylocation[0][3]; fck = arraylocation[1][3];break; 
    case 'E': 
    case 'e': ftk = arraylocation[0][4]; fck = arraylocation[1][4];break; 
    case 'F': 
    case 'f': ftk = arraylocation[0][5]; fck = arraylocation[1][5];break; 
    case 'G': 
    case 'g': ftk = arraylocation[0][6]; fck = arraylocation[1][6];break; 
    case 'H': 
    case 'h': ftk = arraylocation[0][7]; fck = arraylocation[1][7];break; 
    case 'I': 
    case 'i': ftk = arraylocation[0][8]; fck = arraylocation[1][8];break; 
    case 'J': 
    case 'j': ftk = arraylocation[0][9]; fck = arraylocation[1][9];break; 
    case 'K': 
    case 'k': ftk = arraylocation[0][10]; fck = arraylocation[1][10];break; 
    case 'L': 
    case 'l': ftk = arraylocation[0][11]; fck = arraylocation[1][11];break; 
    case 'M': 
    case 'm': ftk = arraylocation[0][12]; fck = arraylocation[1][12];break; 
    case 'N': 
    case 'n': ftk = arraylocation[0][13]; fck = arraylocation[1][13];break; 
    case 'O': 
    case 'o': ftk = arraylocation[0][14]; fck = arraylocation[1][14];break; 
    case 'P': 
    case 'p': ftk = arraylocation[0][15]; fck = arraylocation[1][15];break; 
    case 'Q': 
    case 'q': ftk = arraylocation[0][16]; fck = arraylocation[1][16];break; 
    case 'R': 
    case 'r': ftk = arraylocation[0][17]; fck = arraylocation[1][17];break; 
} 

    cout <<"The ftk value is: "<< ftk<< endl<<"The fck value is: "<< fck<<endl; 

    return ftk; 
    return fck; 

    myInfile.close(); 
} 
+0

程序流程在第一次返回时结束。在退货之前将文件关闭。另外,你没有对交换机做任何事情。 –

+0

对不起,我新的C++我真的不明白..病后发表更多的代码将是感激的任何意见 – user3087985

+0

你有两个'return'语句连续。执行到第一个'return'语句并从函数返回。因此第二个'return'和'fclose'永远不会被执行。你编译器应该已经抓住了这个。将警告级别调高至最大。 –

回答

1
for (row = 0; row<3; row++) //you have no open and close braces for this for loop 
+0

它看起来并不需要它们。我不认为'switch'是为了成为外部循环的一部分。 – paddy

1

建议:
1)查找std::toupperstd::tolower所以你不必在您的case声明中使用大写和小写字母。

2)通过减去字母创建索引:

unsigned int index = std::toupper(woodType) - 'A'; 
ftk = arraylocation[0][index]; 
fck = arraylocation[1][index]; 

3)的函数可以只返回一个值:ftkfck。 如果要返回多个值,请通过引用传递它们或将它们放入结构中并返回修改后的结构的副本。

4)在return语句后没有执行流程,因此您的代码将永远不会执行第2个return语句或fclose

+0

不要忘记限制检查索引。 – paddy