我有一个问题,当我运行它时,最小和最大不能正常显示。 有什么建议? 我必须让范围出现。 我用指针试了一下。 练习可以肯定地完成,但我想用这种方式理解我的错误。
#include <stdio.h>
#include "simpio.h"
#include "genlib.h"
int readArray(int array[100]);
main()
{
int array[100], i, size, *min, *max;
printf("Enter the elements of the array, one per line.\n");
printf("Use -1 to signal the end of the list.\n");
readArray(array);
min = array;
*min = *array;
for (i=1; i<size; i++)
{
if ( *(array+i) < *min )
{
*min = *(array+i);
}
}
max = array;
*max = *array;
for (i=1; i<size; i++)
{
if ( *(array+i) > *max )
{
*max = *(array+i);
}
}
printf("The range of values is %d-%d \n", *min, *max);
system("pause");
}
int readArray(int array[100])
{
int i, size;
size = 0;
for (i=0; i<100; i++)
{
printf("? ");
array[i] = GetInteger();
size += 1;
if (array[i] == -1) {break;}
}
for(i=0; i<size-1; i++)
{
printf("%d ", array[i]);
}
printf("\n");
printf("\n");
}
答案 0 :(得分:1)
您正在覆盖*min
处的值,这是数组中的第一个值。你想要的是制作一个指向值的指针,因此你真正需要的是
min = array;
和
min = array + i;
或min = &array[i]
。
*
运算符取消引用指针,在打印之前,您不想这样做。您可以使用min
和max
指针指向数组中的任何位置,例如,您可以设置const
以防止意外写入到指定时间指向的位置。
以下是根据您自己的代码构建的示例
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int readArray(int *array, int size);
int
main(void)
{
int array[100], i, *min, *max;
srand(time(NULL));
printf("Enter the elements of the array, one per line.\n");
printf("Use -1 to signal the end of the list.\n");
readArray(array, 100);
min = array;
max = array;
for (i = 1; i < 100 ; i++) {
if (*(array + i) < *min)
min = array + i;
if (*(array + i) > *max)
max = array + i;
}
printf("The range of values is %d-%d \n", *min, *max);
}
int
readArray(int *array, int size)
{
for (int i = 0 ; i < size ; i++)
array[i] = 1 + rand() % 100;
for (int i = 0 ; i < size ; i++)
printf("%d ", array[i]);
printf("\n");
printf("\n");
return 0;
}