2014-12-25 1 views
-1
char iCharSelect() 
{ 
//CHARACTER CHOICE 
cout 
    << "\n\n\n Choose Your Stoner:\n\n" 
    << "\n   1 = Chris\n" 
    << "\n   2 = James\n" 
    << "\n   3 = Hunter\n" 
    << "\n   4 = Antonio (Alt. Route)\n" 
    << "\n\n   Enter Character Number: "; 
int iChar = INITIALIZED; 
cin >> iChar; 

//CHARACTER NAME STRING 
string sCharName; 

//CHARACTER CHECK 
    if (iChar == 1){sCharName = "Chris";} 
else if (iChar == 2){sCharName = "James";} 
else if (iChar == 3){sCharName = "Hunter";} 
else if (iChar == 4){sCharName = "Antonio";} 
else    { 
        cout << "\n\n\n\tYOU GET NOTHING!!"; 
        system("PAUSE>NUL"); 
     //PROGRAM CLOSES HERE------------------------------------- 
        cout << iChar; 
        system("PAUSE>NUL"); 
        } 

char *chCharName = &sCharName[0]; 

return *chCharName;  } 

내가 뭘 잘못하고 있니? 이 프로그램은 코드의 표시된 부분에서 닫히고 iChar를 인쇄하려고하면 아무 것도 나오지 않습니다 ..?프로그램이 닫히고 cin이 작동하지 않습니까?

+4

왜 함수의 끝 부분에 포인터 체조? 단지'return chCharName [0];이 전부입니다. – PaulMcKenzie

+0

'if' 문이 사실이 아닌 경우 반환 할 함수는 무엇입니까? – PaulMcKenzie

답변

3

내가 당신이해야한다고 생각 :

숯불 삽입 hASCII에 1로 동일한 경우 (ichar == '1') 2,3 .. 당신이 그것을 할 방법에 대한 동일 물어 경우

/2 ... 그것은 동일하지 않으므로 마지막 "if"문으로 이동합니다.

0

return *chCharName; 포인터를 반환했지만이 함수의 레이블은 char입니다. 문제 중 하나는 당신이 당신의 코드 char*

char* iCharSelect() 
+0

그게 문제가 아니에요, 나는 다른 기능에서 호출 된 정확한 코드 조각을 가지고 있었고 정상적으로 작동했습니다. 이 함수가 실제로 if 문을 실행했을 때만 문제가 발생했습니다. 윈도우가 닫히는 컴파일러 오류가없는 것 같습니다. – ThatDude

0

주요 문제를 반환하는 기능을 레이블 할 필요가 있다는 것입니다 if() 문에 그 상황에 해당되지 않는 경우 chCharName를 설정하지 않는다는 것입니다. 이 경우 비어있는 문자열의 첫 번째 문자를 반환하면 정의되지 않은 동작이 발생합니다.

또한 포인터를 사용할 필요가 없을 때 함수의 끝은 포인터를 사용합니다.

합리적인 구현은 다음과 같습니다

if (sCharName.empty()) 
    return '\0'; 
return sCharName[0]; 
관련 문제