在查找数组中的最小值和最大值时遇到问题。
#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;
}
该代码在编译后会产生以下代码(无警告或错误):
Enter the size of the array:
我可以输入一个数字,但是程序完成了。 是什么导致我的程序执行此操作,该如何解决?
答案 0 :(得分:1)
此声明
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;
}
程序输出看起来像
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
答案 1 :(得分:0)
您需要在此 scanf 呼叫中传递 count 的地址:
a = Analysis(
...
datas=[('path/to/file.jpg', 'assets')]
...
...
exe = EXE(
...
icon='path/to/icon.ico')