函数无法返回值

时间:2013-07-23 05:00:05

标签: c function quicksort

我正在用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.
    };

为什么会这样?

这只是一个更大的程序的功能,我没有发布,因为它似乎更像是函数的逻辑问题。它已在完整程序中定义的结构。

6 个答案:

答案 0 :(得分:7)

声明您的函数返回void。这会使您的return个关键字变得多余。只需删除它们。

答案 1 :(得分:3)

您已将函数Arrange()声明为void,显然void函数无法按定义返回值。

如@CarlNorum所述,只需删除return语句。

答案 2 :(得分:2)

在调用Arrange之前删除return语句,因为void不返回任何内容。

}}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.
};

答案 3 :(得分:1)

语法: Return_Type Function_Name参数

在这里定义void意味着什么都不返回

答案 4 :(得分:0)

返回void的函数意味着它根本不返回值。如果您的函数声明为return,则C不允许您将void语句与表达式一起使用(即使它是void)。

由于这应该是一个快速排序,我假设你实际上想要排序下半部分和上半部分。所以返回是错误的做法(返回会导致一半的数组未分类)。从递归调用中删除return个关键字。让函数从函数的末尾开始,以表示函数调用的结束。

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

答案 5 :(得分:0)

函数的返回类型是 void ,因此函数无法返回任何值。