2013-07-23 4 views
0

C에서 빠른 정렬 정렬 함수의 코드를 작성하고 있지만 함수의 재귀 호출에서 다음 오류가 표시됩니다. Arrange (int, int)는 값을 반환 할 수 없습니다.함수가 값을 반환 할 수 없습니다.

void Arrange(int left,int right){ 
    int i,j,x,w; 
    i=left,j=right; 
    x=(left+right)/2; 
    do{ 
     while(struct[i].number < struct[x].number)i++; 
     while(struct[j].number > struct[x].number)j--; 
     if(i<=j){ 
      w=struct[i].number; 
      struct[i].number=struct[j].number; 
      struct[j].number=w; 
      i++;j--; 
    }}while(i<=j); 
    if(left<j) 
    return Arrange(left,j); //1st recursive call. It doesn't work. 
    if(right>i) 
    return Arrange(i,right); //2nd recursive call.It doesn't work either. 
    }; 

왜 이런 일이 무엇입니까?

이것은 더 큰 프로그램의 기능입니다.이 프로그램은 기능의 논리적 인 문제처럼 보이기 때문에 게시하지 않습니다. struct는 이미 전체 프로그램에서 정의되어 있습니다.

+4

반환 유형이 'void'입니다. 그래서 어떻게 값을 반환 할 수 있습니까 ?? – Jeyaram

+1

또한,'struct'는 유효한 식별자가 아닌 키워드입니다 ... –

+0

대답이 있으시면 답변으로 표시하십시오. –

답변

7

함수가 void을 반환하도록 선언되었습니다. 따라서 return 키워드는 불필요합니다. 그냥 삭제하십시오.

+0

+1. 느리지 만 더 나은 대답입니다! :) –

+0

답변 주셔서 감사합니다! 내 바보 같은 실수 야. – oquiroz

3

함수 Arrange()void으로 선언했으며 분명히 void 함수는 정의에 의해 값을 반환 할 수 없습니다.

@CarlNorum에서 설명한대로 간단히 return 문을 제거하십시오.

+0

잘 빠릅니다. 감사! – oquiroz

1

구문 : 무효가 아무것도 반환하지 않기 때문에 Return_Type의 FUNCTION_NAME 인수

여기에 당신이 무효 방법을 정의는 정렬 호출하기 전에 return 문을 제거 아무것도에게

2

을 반환하지 않습니다.

}}while(i<=j); 
    if(left<j) 
    Arrange(left,j); //1st recursive call. It doesn't work. 
    if(right>i) 
    Arrange(i,right); //2nd recursive call.It doesn't work either. 
}; 
+0

@ Carl Norum처럼 보입니다. – liang

0

void을 반환하는 함수는 값을 전혀 반환하지 않음을 의미합니다. 함수가 void으로 선언 된 경우 C는 표현식이있는 return 문을 사용할 수 없습니다 (void 인 경우에도 마찬가지 임).

이것은 빠른 정렬이라고 가정되기 때문에 실제로 하반부와 상반부를 모두 정렬한다고 가정합니다. 그래서 돌아 오는 것은 어쨌든해야 할 일이 잘못되었습니다 (돌아 오면 배열의 절반이 정렬되지 않을 것입니다). 재귀 호출에서 return 개의 키워드를 제거하십시오. 함수가 함수 호출의 끝을 알리기 위해 함수의 끝에서 제외되도록하십시오.

if(left<j) Arrange(left,j); 
if(right>i) Arrange(i,right); 
0

함수의 반환 형식은 무효 그래서 함수가 값을 반환 할 수있는 방법이 없습니다.

관련 문제