【问题标题】:Function cannot return a value函数不能返回值
【发布时间】:2013-07-23 05:00:04
【问题描述】:

我正在用 C 编写快速排序排列函数的代码,但在函数的递归调用中显示以下错误:Arrange(int,int) 无法返回值。 em>

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

为什么会这样?

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

【问题讨论】:

  • 返回类型为void。那你怎么能返回一个值??
  • 另外,struct 是关键字,不是有效标识符...
  • 如果您有答案,请标记为已回答

标签: c function quicksort


【解决方案1】:

你的函数被声明为返回void。这使您的 return 关键字变得多余。删除它们即可。

【讨论】:

    【解决方案2】:

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

    如@CarlNorum 所述,只需删除返回语句即可。

    【讨论】:

    • 那太快了。谢谢!
    【解决方案3】:

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

    【讨论】:

    • 看起来@Carl Norum 打败了我
    【解决方案4】:

    语法:Return_Type Function_Name 参数

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

    【讨论】:

      【解决方案5】:

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

      由于这应该是一种快速排序,我假设您实际上想要对下半部分和上半部分进行排序。所以无论如何返回是错误的事情(返回会导致一半的数组未排序)。从递归调用中删除 return 关键字。让函数从函数的末尾落下,表示函数调用结束。

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

      【讨论】:

      • 作为扩展,GCC(和 G++)实际上接受带有 void 类型表达式的 return 语句。
      • @Lowpower:不是每个人都使用-pedantic -Werror吗? C++ 允许返回 void,因为它简化了返回可调用模板参数结果的模板的编写。
      • jxh,不,很明显不是每个人都使用-pedantic
      【解决方案6】:

      函数的返回类型是void,所以函数不可能返回任何值。

      【讨论】:

        猜你喜欢
        • 2014-01-22
        • 2019-01-08
        • 1970-01-01
        • 2016-09-08
        • 2015-04-12
        • 1970-01-01
        • 1970-01-01
        • 2018-11-23
        相关资源
        最近更新 更多