2017-12-22 29 views
0

현재 코드의 배열 Transversing :C에서 구조체 오류 ++

const int MAX_CODENAME = 25; 
const int MAX_SPOTS = 5; 

struct Team {  
string TeamName[MAX_CODENAME]; 
short int totalLeagueGames; 
short int leagueWins; 
short int leagueLoses; 
}; 

//GLOBAL VARIABLES: 
Team league[MAX_SPOTS]; 


void addTeams(){ 
int i = 0; //first loop 
int j; //second loop 
while(i < MAX_SPOTS){ 
    cout << "****** ADD TEAMS ******" << endl; 

    cout << "Enter the teams name " << endl; 
    scanf("%s", league[i].TeamName) ; 
} 

void searchTeam(){ 

    string decider[MAX_CODENAME]; 
    cout << "Please enter the team name you would like the program to retrieve: " << endl; 
    cin >> decider[MAX_CODENAME]; 

for(int i = 0; i < MAX_SPOTS; i++){ 

    if(decider == league[i].TeamName){ 

     cout << endl; 
     cout << league[i].TeamName << endl; 

     break; 
    }else{ 
     cout << "Searching...." << endl; 
    } 



} 

을}

나는 정말 그 작동하지 않는 이유를 잘 모릅니다하지만 이러한 모든과 같은 임시 수입 헤더 파일하지만 프로그램이 충돌을 포함했다 내가 데이터를 입력 한 다음 검색을 시도 할 때. 나는 죽음의 원을 얻었고 프로그램이 응답하지 않습니다. 다음에 라고 말했습니다. 프로세스는 255 (0xFF)을 반환했습니다. 그것은 심지어 밖으로 넣어하지 않습니다 검색 .... 그 이름을 입력하자마자 프로그램은 실질적으로 포기합니다.

위대한 포인터를 사용하여 최적화 할 수도 있습니다.

tl; 실행 시간 오류로 인해 이름을 입력하자마자 검색이 실패합니다. 그리고 기록을 위해 내가 입력 한 이름이 유효한지 확인했습니다.

+1

배열의 크기가 MAX_CODENAME이면 마지막 요소의 인덱스는 MAX_CODENAME - 1입니다. – Xatyrian

+0

stringName [MAX_CODENAME]; '문자열 배열을 만든다.나는 팀이 하나의 이름만을 가질 것이라고 생각한다 :'string TeamName;'('string'은'std :: string'이라고 가정한다.) –

+0

scanf가 아니라 iostreams를 사용하라. 배열이 아닌 std :: vector를 사용하십시오. –

답변

0

scanfstd::string을 알지 못합니다. std::cin >> league[i].TeamName을 사용하십시오.

0

귀하의 TeamName 멤버 변수 : 당신이 배열을 courrupting하는

scanf("%s", league[i].TeamName) ; 

:이 줄 수 있도록

string TeamName[MAX_CODENAME]; 

는 25 문자열의 배열입니다. 어떻게 string 유형 (scanf와를 채우는 데

string TeamName; 

하고 이름을 읽을 때 다음, 당신이 알고 iostream의를 사용해야합니다 : 당신은 정말 배열 어쨌든, 그래서에 TeamName 선언을 변경하지 않으 전용) C의 문자 배열에서 작동합니다

std::cin >> league[i].TeamName 
+0

정말 고마워요. 나는 내가 너무 바보 같았다고 생각하지 않는다. – takingLs

0
scanf("%s", league[i].TeamName) ; 

이것은

std::cin >> league[i].TeamName ; 
로 변경해야

여기에 다른 몇 가지 ....

string decider[MAX_CODENAME]; 
     cout << "Please enter the team name you would like the program to retrieve: " << endl; 
     cin >> decider[MAX_CODENAME]; 

때마다 당신이 입력 값, 당신은 결정자에 입력 된 값을 유지하기 위해 컴퓨터를 말하고있다 [25] 그러나 컴퓨터는 읽기 인덱스 0-24 .

if(decider == league[i].TeamName){ 

어떤 배열 슬롯을 팀 이름과 비교합니까? 명령문보다 25 번째 요소가

if(decider[24] == league[i].TeamName){ 

이어야합니다. TeamNames의 수가 알려지지 않은 경우 포인터가 더 적합합니다. 제시된 제한된 코드를 기반으로, 나는 당신이 기본 데이터 유형의 영역 내에 머무를 것을 강력하게 권고한다. 문제 해결을 위해 나중에 전체 코드를 게시하십시오.