C 打印数组的最小值和最大值

C 打印数组的最小值和最大值,c,arrays,max,min,C,Arrays,Max,Min,我在查找数组中的最小值和最大值时遇到问题 #include <stdio.h> int maximum(int array[], int n); int minimum(int array[], int n); int main() { int array[0]; int count, i; printf("Enter the size of the array: "); scanf("%d", count); printf("Ent

我在查找数组中的最小值和最大值时遇到问题

#include <stdio.h> 

int maximum(int array[], int n);
int minimum(int array[], int n);

int main() 
{ 
    int array[0];
    int count, i;
    printf("Enter the size of the array: ");
    scanf("%d", count);
    printf("Enter the elements of the array:\n");
    for (i = 0; i < count; i++) 
    {
        scanf("%d", &array[i]);
    }
    printf("Maximum: %d", maximum(array, count)); 
    printf("Minimum: %d", minimum(array, count));
    return 0; 
} 

int maximum(int array[], int n) 
{ 
    int i; 
    int max = array[0]; 
    for (i = 1; i < n; i++) 
    {
        if (array[i] > max) 
            max = array[i]; 
    }
    return max; 
} 

int minimum(int array[], int n)
{
    int i; 
    int min = array[0]; 
    for (i = 1; i < n; i++) 
    {
        if (array[i] < min) 
            min = array[i]; 
    }
    return min; 
}
我可以输入一个数字,但它会完成程序。
是什么原因导致我的程序执行此操作,我如何修复它?

您需要在此scanf调用中传递计数地址:

scanf("%d", &count);
本声明

int array[0];
是无效的,没有意义

还有这个电话

scanf("%d", count);
具有未定义的行为。你必须写作

scanf("%d", &count);
此外,由于传递数组的元素在函数中没有更改,因此第一个函数参数应该具有限定符const

请注意,通常用户可以将等于0的值作为第二个参数传递。在这种情况下,函数将具有未定义的行为

更新后的程序可以按以下方式进行

#include <stdio.h> 

size_t maximum( const int array[], size_t n ); 
size_t minimum( const int array[], size_t n ); 

int main( void ) 
{
    printf( "Enter the size of the array: " );

    size_t count;

    scanf( "%zu", &count );

    int array[count];

    printf("Enter the elements of the array:\n");
    for ( size_t i = 0; i < count; i++) 
    {
        scanf("%d", &array[i]);
    }

    printf("Maximum: %d\n", array[maximum( array, count )] ); 
    printf("Minimum: %d\n", array[minimum( array, count )] );

    return 0; 
} 

size_t maximum( const int array[], size_t n ) 
{ 
    size_t max_i = 0;
    ; 
    for ( size_t i = 1; i < n; i++ ) 
    {
        if ( array[max_i] < array[i] ) max_i = i; 
    }

    return max_i; 
} 

size_t minimum( const int array[], size_t n ) 
{ 
    size_t min_i = 0;
    ; 
    for ( size_t i = 1; i < n; i++ ) 
    {
        if ( array[i] < array[min_i] ) min_i = i; 
    }

    return min_i; 
} 

可能是因为scanf的使用不正确:它应该是
scanf(“%d”,&count)
int array[0]
定义一个能够容纳零值的数组!您不能“扫描到数组[某物]”,因为数组没有元素……因此,未初始化的
count
恰好是
@gooddeds。修复了它,但仍然会产生垃圾output@pmg那么我该如何解决这个问题,以便它将值放入数组中呢?谢谢!这是完美的,工作正常。谢谢你的所有帮助。@ WeeVeAN其实是一样的,当第一个迭代器等于最后一个迭代器时,C++中的算法中返回第一个迭代器。@ WeeVeAN函数将返回0,数组(0)将产生-1。有什么问题吗?@WeatherVane似乎你没有仔细查看代码嗯,好的,你在跟踪索引,而不是值,但是没有必要改变它。
#include <stdio.h> 

size_t maximum( const int array[], size_t n ); 
size_t minimum( const int array[], size_t n ); 

int main( void ) 
{
    printf( "Enter the size of the array: " );

    size_t count;

    scanf( "%zu", &count );

    int array[count];

    printf("Enter the elements of the array:\n");
    for ( size_t i = 0; i < count; i++) 
    {
        scanf("%d", &array[i]);
    }

    printf("Maximum: %d\n", array[maximum( array, count )] ); 
    printf("Minimum: %d\n", array[minimum( array, count )] );

    return 0; 
} 

size_t maximum( const int array[], size_t n ) 
{ 
    size_t max_i = 0;
    ; 
    for ( size_t i = 1; i < n; i++ ) 
    {
        if ( array[max_i] < array[i] ) max_i = i; 
    }

    return max_i; 
} 

size_t minimum( const int array[], size_t n ) 
{ 
    size_t min_i = 0;
    ; 
    for ( size_t i = 1; i < n; i++ ) 
    {
        if ( array[i] < array[min_i] ) min_i = i; 
    }

    return min_i; 
} 
Enter the size of the array: 10
Enter the elements of the array: 1 2 3 4 5 6 7 8 9
Maximum: 9
Minimum: 0