2016-07-31 2 views
-1

나는 거의 모든 것을 시도했지만, 내가이 함수를 호출 할 때 왜이 함수가 아무 것도하지 않을 이유를 알 수 없다. 이 함수는 올바르게 호출됩니다. saveGame(hscore, selectedSaveSlot); (hscoreselectedSaveSlotint으로 올바르게 정의되었습니다.) 또한이 함수는 switch 문 내에서 다른 함수 내에서 호출됩니다. 누구나 왜 그것이 효과가 없을지에 대한 아이디어가 있습니까?(C++) saveGame() 함수의 문제점은 무엇입니까? 함수를 호출하면 함수가 실행되지 않지만 오류가 없습니다.

(즉,이 함수를 호출 할 때 아무 것도 말하지 않고 저장 파일을 만들지 않으면 코드가 건너 뛰고 끊김없이 계속 실행됩니다.)

void saveGame(int highscore, int saveSlot) {   
ofstream saveFile1; 
ofstream saveFile2; 
ofstream saveFile3; 
switch (saveSlot) { 
case '1': 

    saveFile1.open("SaveFile1.txt", ios::out); 



     saveFile1 << highscore;//writing highsore to a file 

     saveFile1.close(); 
     cout << "Your game has been saved successfully!" << endl; 
     delayScroll(10, 50); 

     break; 
case '2': 
    saveFile2.open("SaveFile2.txt", ios::out); 



     saveFile2 << highscore; //writing highsore to a file 

     saveFile2.close(); 
     cout << "Your game has been saved successfully!" << endl; 
     delayScroll(10, 50); 

     break; 
case '3': 
    saveFile3.open("SaveFile3.txt", ios::out); 



     saveFile3 << highscore; //writing highsore to a file 

     saveFile3.close(); 
     cout << "Your game has been saved successfully!" << endl; 
     delayScroll(10, 50); 

     break; 
    } 
inMenu = true; 
} 
+0

충분히 구체적인 것은 아니지만 유감스럽게도 누군가가 답변이나 제안을 제공해 드릴 수 있으면 좋겠습니다. 어떤 의견이라도 대단히 감사합니다! 고맙습니다! – ajaj777

+0

'saveSlot'이 ''1 '..'3 ''의 범위에 없거나 실제로'1 .. 3'의 값을 갖는'int'가 될 수 있습니까? 'switch' 문에서, 적용된 다른 레이블이 하나도 없으며 오류가있을 수 있다고 알려주지 만, 항상 'default :'레이블을 갖는 것이 합리적입니다. 하지만 실제로는'case 1 :'등을 의미하고'case '1':'등이 아닌 것으로 추측합니다. –

+0

함수가 호출 될 때 터미널에서 무엇을 말합니까? (saveSlot과 같이) 디버그 할 변수를 출력 해보십시오. 왜 스위치 구문을 사용하고 있습니까? 코드를 변경하지 않아도되도록 등록하십시오. –

답변

2

당신은 아마 정수 1, 2 saveGame를 호출, 3 등은 그러나, '1'1은 동일하지 않습니다. 첫 번째 문자는 ASCII 값이 49 인 문자이며, 두 번째 문자는 정수 1입니다. 스위치 안에는 문자 '1', '2', '3'을 사용하고 있습니다. saveGame(highscore, 49) 또는 saveGame(highscore, 50) 또는 saveGame(highscore, 51)으로 전화하면 일치합니다. 하지만 saveGame(highscore, 1) 또는 saveGame(highscore, 2) 또는 saveGame(highscore, 3)은 일치하지 않습니다. 한마디로

,이 사실은 다음과 같습니다

'1' != 1 
'2' != 2 
'1' == 49 
실제 정수를 사용하도록 케이스를 변경

.

+0

실제로, '1'== 49 '가 구현에 의존하는지 여부. ASCII를 사용하지 않는 플랫폼이있을 수 있습니다. –

+0

정말 고마워요! 나는 그것이 'int'이지만 아니라고 생각했다. 올바른 방법으로 코드를 실행 했으므로 함수가 의도 한대로 작동합니다! 또한 '1'의 ASCII 값이 49임을 설명하는 철저한 감사합니다! 오늘 배운 또 다른 일은 ... – ajaj777