2013-12-11 152 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