我正在尝试用 C 编写一个排序函数,但我在声明函数方面还很陌生,无法使其工作

问题描述

我正在学习如何声明函数并在 C 中使用它们。我尝试用 C 编写砖排序算法,但无法使其工作。当我在 main 函数中编写所有内容时,算法本身工作正常,所以我认为问题在于我如何尝试声明函数。正如我所说,我是这方面的新手,所以如果我遗漏了一些明显的东西,请原谅我,并提前感谢您抽出时间帮助我。我真的很感激。

这是我的代码

#include <stdio.h>

int n,i,a[100],temp,isSorted;

int brickSort(a[],n)
{
    isSorted=0;
    
    while(isSorted==0)
    {
        isSorted=1;
        
        for(i=0; i<=n-2; i=i+2)
        {
            if(a[i]>a[i+1])
            {
                temp=a[i];
                a[i]=a[i+1];
                a[i+1]=temp;
                isSorted=0;
            }
        }
        
        for(i=1; i<=n-2; i=i+2)
        {
            if(a[i]>a[i+1])
            {
                temp=a[i];
                a[i]=a[i+1];
                a[i+1]=temp;
                isSorted=0;
            }
        }
    }
    
    for(i=0; i<n; i++)
    {
        printf("%d ",a[i]);
    }
}

int main()
{
    printf("Enter the amount of numbers ");
    scanf("%d",&n);
    
    for(i=0; i<n; i++)
    {
        printf("Enter number ");
        scanf("%d",&a[i]);
    }
    
    return brickSort(a[],n);

    return 0;
}

这是我收到的错误信息

 int brickSort(a[],n)
               ^
main.c:5:20: error: expected declaration specifiers or ‘...’ before ‘n’
 int brickSort(a[],n)
                    ^
main.c: In function ‘main’:
main.c:53:12: warning: implicit declaration of function ‘brickSort’ [-Wimplicit-function-declaration]
     return brickSort(a[],n);
            ^~~~~~~~~
main.c:53:24: error: expected expression before ‘]’ token
     return brickSort(a[],n);
                        ^

解决方法

你必须把参数的类型放在参数列表中。

int brickSort(int a[],int n)
,

您必须指定参数的类型来声明参数,例如:

int brickSort(int a[],int n)

并从函数调用中删除额外的 [],例如:

return brickSort(a,n);

在这种情况下,所有变量都被声明为全局变量(设计不好),因此您实际上不需要这些参数,您可以像这样删除它们:

int brickSort(void)
return brickSort();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...