2013-07-15 3 views
1

오류가 출력의 맨 아래에 있습니다.C++ Game Started 'std :: out_of_range'인스턴스를 던진 후에 호출 됨 begin

Output: 

내 스크램블 워드 게임에 오신 것을 환영합니다!

A) 게임 데이터베이스에 B를 단어를 추가) 단어를 다 제거)를 구성 카운트 다운 시간 D) 게임 전자) 선택 게임 레벨 F)보기 점수 차트 g 시작) 가 알파벳을 입력하십시오 종료 선택 : D

게임 가 '표준 : : out_of_range' 의 인스턴스를 던지는 후 호출 종료 시작 무엇을() : 벡터 :: _ M_range_check 사과 오렌지 멜론 lemondinosaur RUN FINISHED; 중단되었습니다. 실시간 : 1 초; 사용자 : 0ms; 시스템 : 0ms

아래의 코드는 내 코드입니다. 내 코드가 뭐가 잘못 되었나요? 감사합니다. 도움이 될 것입니다! 건배! wordListlevelList보다 큰 가능성이 있기 때문에

+0

"출력"으로 우리에게주는 것이 코드에없는 일부 문자열을 가지고 있기 때문에 코드의 일부가 누락되었다고 생각하십시오 – MisterJ

+3

'string jumble = levelList.at (rand() % wordList.size());'인덱스는 항상 billz

+0

디버깅을 시도 했습니까? 어떤 선이 쏟아지고 있습니까? –

답변

5
levelList.at(rand()% wordList.size()); 

이 시간의 일부 범위 밖에있을 가능성이 높습니다.

아마, 당신은

levelList.at(rand()% levelList.size()); 
        ^^^^^^^^^ 

또한 startGame에 선언 된 level 변수를 초기화하는되지 않습니다 의미, 그래서 levelList 완전히 비어있을 것입니다 가능성이 높습니다. 아마도 함수 인수를 사용하여 레벨을 지정하려고했을 것입니다.

+0

단어 목록과 레벨 작성자는 실제로 동일합니다. 레벨 작성자가 다른 레벨에 따라 단어와 정렬을 비교합니다. –

+0

@WilsonTurner : 아니요, 'levelList'는'wordList'의 단어 중 일부만 채워집니다. 레벨 '이므로 일반적으로 작을 것입니다. 또한'level'을 초기화하지 않기 때문에 비어있을 가능성이 높습니다. –

+0

내 게임 메뉴가 올라 오면 이미 레벨 입력을 요구합니다. –

2

당신이 워드 파일보다 두 문자, levelListwordList보다 짧은 것이 단어가 포함 된 경우, 그래서이 줄

levelList.at(rand()% wordList.size()); 

문제 당신 상태의 원인이됩니다.

0

'0'으로 설정된 변수 'level'에 명시 적으로 값을 지정하지 마십시오. switch 문은이 경우를 다루지 않으므로 levelList는 비어 있습니다. 그런 다음 범위를 벗어나는 메시지를 유발하는 길이가 0 인 레벨 목록의 항목에 액세스하려고합니다.

관련 문제