【问题标题】:Write a C program to create new array from a given array of integers shifting all even numbers before all odd numbers编写一个 C 程序,从给定的整数数组创建新数组,将所有偶数移到所有奇数之前
【发布时间】:2019-11-07 12:33:13
【问题描述】:

print_array(int parray[], int size) 中存在构建错误。为什么错误列表显示:

missing type specifier - int assumed. Note: C++ does not support default-int

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int arr_size;
    int a1[] = { 1, 2, 5, 3, 5, 4, 6, 9, 11 };
    arr_size = sizeof(a1) / sizeof(a1[0]);
    printf("Elements in original array are: ");
    print_array(a1, arr_size);

    int size = arr_size, index = 0;
    for (int i = 0; i < size; i++) {
        if (a1[i] % 2 == 0) {
            int temp = a1[index];
            a1[index] = a1[i];
            a1[i] = temp;
            index++;
        }
    }
    printf("\nElements in new array are: ");
    print_array(a1, arr_size);
}
print_array(int parray[], int size)
{
    int i;
    for (i = 0; i < size - 1; i++) {
        printf("%d, ", parray[i]);
    }
    printf("%d ", parray[i]);
    printf("\n");
}

【问题讨论】:

  • 您的确切错误信息是什么?你说的默认整数是什么意思?
  • print_array 没有定义甚至声明。你期望它做什么?给函数起个好名字是件好事,但它们不会自己写。
  • 欢迎来到 Stack Overflow。请阅读the help pages,获取the SO tour,了解how to ask good questions,以及this question checklist。在询问有关构建错误的问题时,请始终包含所有错误输出的完整和完整的复制粘贴(作为文本)。
  • 现在,对于您的问题,C 和 C++ 是不同的语言,并且对于函数声明等内容有不同的规则。在 C++ 中,所有函数都必须有一个显式的返回类型,并且所有函数都需要在使用之前声明。 (部分)错误消息告诉我们您正在将其构建为 C++ 程序,而不是 C。
  • 这是 C 还是 C++?只标记一个。 print_array 没有返回类型,这在 C++ 中无效如果 C(如标题所示)那么您需要编译为 C,而不是 C++

标签: c function declaration return-type


【解决方案1】:

C99 不允许对未预先声明的函数使用函数调用。而且它也不允许在函数声明中省略函数返回类型。在 C99 之前,假定没有返回类型的函数的返回类型为 int。

因此您需要 1) 在使用函数之前声明该函数,以及 2) 明确指定其返回类型为 void,因为该函数不返回任何内容。

由于以下(不清楚)循环语句,您也在函数中使用冗余 printf 调用

for (i = 0; i < size - 1; i++) {
            ^^^^^^^^^^^^

由于该函数不会更改数组,因此应使用限定符 const 进行声明。

数组的大小应该是size_t 类型。它是sizeof 运算符返回的值的类型。

main 中的循环可以优化。如果它们的索引彼此相等,则不需要交换两个元素。

这是您的更新程序。

#include <stdio.h>

void print_array( const int parray[], size_t size );

int main(void)
{ 
    int a1[] = { 1, 2, 5, 3, 5, 4, 6, 9, 11 };
    size_t arr_size = sizeof( a1 ) / sizeof( a1[0] );

    printf( "Elements in original array are: " );  
    print_array( a1, arr_size );

    for ( size_t i = 0, j = 0; i < arr_size; i++ )
    {
        if ( a1[i] % 2 == 0  )
        {
            if ( i != j )
            {
                int temp = a1[j];
                a1[j] = a1[i];
                a1[i] = temp;
            }                   
            j++;
        }
    }

    printf( "\nElements in new array are: " );  
    print_array( a1, arr_size );
}

void print_array( const int parray[], size_t size )
{
    for( size_t i=0; i < size; i++ )  
    {  
        printf( "%d, ", parray[i] );  
    } 

    putchar( '\n' );
}

【讨论】:

    猜你喜欢
    • 2016-01-27
    • 2013-01-04
    • 2023-02-06
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 2018-09-10
    相关资源
    最近更新 更多