【问题标题】:main.c:36:9: error: array size missing in ‘num’ int num[]; Why am I getting error for array size although i have given array size in code?main.c:36:9: 错误:‘num’ int num[] 中缺少数组大小;尽管我在代码中给出了数组大小,但为什么会出现数组大小错误?
【发布时间】:2021-11-12 00:13:54
【问题描述】:
#include <stdio.h>

int removeduplicates(int arr[],int n){
    int j=0;
    int temp[15];
    if(n==0 || n==1){
         return n;
    }

    for(int i=0;i<n-1;i++){
        if(arr[i]!=arr[i+1]){
            temp[j++]=arr[i];
        }
        temp[j++]=arr[n-1];
    }

    for(int i=0;i<j;i++){
         arr[i]=temp[i];
    }
    return j;
}

int main(){
    int n;
    int num[];
    num[]= {1,2,3,3,4,4,5,5,5};
    n= sizeof(num)/sizeof(num[0]);

    n=removeduplicates(num,n);
    printf("%d",n);
    return 0;
}

在这个问题中,我正在编写一个代码来从排序数组中删除重复项。但是,尽管我定义了数组大小并且虽然我提供了数组大小,但我收到了以下错误。

main.c:36:9: error: array size missing in ‘num’
     int num[];
         ^~~
main.c:37:9: error: expected expression before ‘]’ token
     num[]= {1,2,3,3,4,4,5,5,5};

【问题讨论】:

  • 您不能只是猜测语法或尝试通过反复试验来学习它。您需要实际学习初级 C 书籍中有关数组的章节。

标签: arrays c declaration function-definition


【解决方案1】:

这段代码sn-p

int num[];
num[]= {1,2,3,3,4,4,5,5,5};

语法不正确。

改为写

int num[] = {1,2,3,3,4,4,5,5,5};

同样在函数中声明这个幻数为 15

int temp[15];

还有这句话

   temp[j++]=arr[n-1];

在这个for循环的子语句中

for(int i=0;i<n-1;i++){
   
   if(arr[i]!=arr[i+1]){
       temp[j++]=arr[i];
   }
   temp[j++]=arr[n-1];
}

没有意义。

要删除重复项,无需定义辅助数组。

这个函数可以写成例如下面的演示程序中的shwon。

#include <stdio.h>

size_t removeduplicates( int arr[], size_t  n )
{
    size_t m = 0;
    
    for ( size_t i = 0; i != n; )
    {
        if ( m != i )
        {
            arr[m] = arr[i];
        }
        
        ++m;
        
        while ( ( ++i != n && arr[i] == arr[i-1] ) );
    }
    
    return m;
}
 
int main(void) 
{
    int num[]= { 1, 2, 3, 3, 4, 4, 5, 5, 5 };
    const size_t N = sizeof( num ) / sizeof( *num );
    
    for ( size_t i = 0; i != N; i++ )
    {
        printf( "%d ", num[i] );
    }
    putchar( '\n' );

    size_t m = removeduplicates( num, N );
    
    for ( size_t i = 0; i != m; i++ )
    {
        printf( "%d ", num[i] );
    }
    putchar( '\n' );

    return 0;
}

程序输出是

1 2 3 3 4 4 5 5 5 
1 2 3 4 5 

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2016-04-20
    • 2022-01-08
    • 2018-08-15
    相关资源
    最近更新 更多