2013-12-11 3 views
0

이 프로그램은 데이터 파일에서 속성을 가져 와서 계산으로 프로그램에 입력하는 프로그램입니다.
1) 그래서 당신이없는 std::toupper 또는 std::tolower을 봐 : 어떤 도움이파일에서 배열로 데이터를 읽는 방법

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

필요없는 것처럼 보입니다. 나는 '스위치'가 외부 루프의 일부가 될 것이라고 생각하지 않는다. – paddy

1

제안한다 ..이 순간에 내 코드이지만, 그것으로 모든 값을 복용하지 않습니다 case 문에 대문자와 소문자를 모두 사용하십시오.

2) 문자 감산하여 인덱스를 생성 :

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

3) 함수는 하나 개의 값을 리턴 할 수 ftk 또는 fck한다. 두 개 이상의 값을 반환하려면 참조로 전달하거나 구조체에 넣고 수정 된 구조의 복사본을 반환하십시오.

4) return 문 다음에 실행이 수행되지 않으므로 코드에서 두 번째 return 문 또는 fclose을 실행하지 않습니다.

+0

인덱스를 경계 체크하는 것을 잊지 마라. – paddy

관련 문제