2010-04-01 2 views
2
location pick(void){ // generates a random location 
    location get; 
    get.x = rand() % FIELD_SIZE + 1; 
    int forY = rand() % FIELD_SIZE +1; 
    switch(forY){ 
    case 1: 
     get.y = 'a'; 
      break; 
    case 2: 
     get.y = 'b'; 
      break; 
    case 3: 
     get.y = 'c'; 
      break; 
    case 4: 
     get.y = 'd'; 
      break; 
    case 5: 
     get.y = 'e'; 
      break; 
    } 

} 

답변

9

기능 끝에는 return get;이 누락되었습니다.

+0

HA, 감사합니다. – Allen

+3

@Allen : 녹색 체크 표시를 클릭하여 질문에 대한 대답을 나타냅니다. – GManNickG

1

함수에서 값을 반환합니까?

6

기능상 return get;으로 확인하십시오!

그렇지 않으면 함수를 void pick으로 선언하고 싶습니다.

1

이 함수는 쓰여진대로 아무 것도 반환하지 않지만 location을 반환하도록 선언되었습니다. 마르크가 말했듯이 결국 return get;을 원할 것입니다.

0

location 항목을 함수를 참조하여 전달할 수 있습니다. 또한,

void pick(location& get) 
{ 
    get.x = rand() % FIELD_SIZE + 1; 
    int forY = rand() % FIELD_SIZE +1; 
    switch(forY){ 
    case 1: 
     get.y = 'a'; 
      break; 
    case 2: 
     get.y = 'b'; 
      break; 
    case 3: 
     get.y = 'c'; 
      break; 
    case 4: 
     get.y = 'd'; 
      break; 
    case 5: 
     get.y = 'e'; 
      break; 
    } 
    return; 
} 

스위치 문에서 default 사건에 대해 생각 :이 스택 크기를 줄일 수 있습니다. 오류 처리는 나중에 디버깅 시간 낭비를 방지하는 데 도움이됩니다.

또 다른 제안 : switch 문을 테이블 조회로 변환하십시오. 이렇게하면 테이블을 변경하여 코드를 변경하지 않고도 기능을 다시 테스트 할 수 있습니다. 이는 외부 파일에 데이터를 배치하는 데까지 확장 될 수 있습니다. 외부 파일을 사용하면 프로그램을 다시 작성할 필요없이 데이터를 변경할 수 있습니다. 이 완전히 이식 할 수 없습니다 순수 이론

location pick(void){ // generates a random location 
    location get; 
    get.x = rand() % FIELD_SIZE + 1; 
    get.y = rand() % FIELD_SIZE +'a'; 
    return get; 
} 

- 문자 :

0

흠 ... 이제이 문제를 해결하는 방법을 들었으니, 여기에 내가 코드를 작성 줄 방법 인접하지 않아도됩니다. 실제로 연속적이지 않은 유일한 위치는 EBCDIC이며 사용하는 범위 내에서 연속적입니다. 그러나 정말로 우려하고 있다면 다음과 같이 할 수 있습니다.

location pick(void){ // generates a random location 
    static char letters[] = "abcdef"; 
    location get; 
    get.x = rand() % FIELD_SIZE + 1; 
    get.y = letters[rand() % FIELD_SIZE]; 
    return get; 
} 
관련 문제