Проблема с вашим кодом (я думаю, вы неправильно его набрали) является вторым условием для l oop. Если вы проверите для array [count != 0]
, значение выражения count != 0
может быть либо 1
, либо 0
, поэтому вы просто получаете доступ к array[0]
или array[1]
.
. Если вы хотите исправить просто замените его на array[count] != 0
, но это не очень хорошее решение. Вы уже посчитали, сколько чисел вам нужно проверить, почему бы просто не проигнорировать последнее (которое равно 0)?
При этом, это код, который вы хотели:
#define SIZE 100
int main()
{
int count = 0, store, array[SIZE], total;
do
{
printf("\nEnter integer number %d. Press 0 to exit: \n", (count + 1));
scanf("%d", &store);
array[count ++] = store;
} while ( count < SIZE && store != 0 );
int min = array[0], max = array[0];
total = count;
printf("Total number of values in array is %d.\n", total);
for (count = 0; count < total-(total != SIZE); count ++)
{
if(array[count] < min)
min = array[count];
if(array[count] > max)
max = array[count];
}
printf("\nThe min value is %d.\nThe max value is %d.\n", min, max);
return 0;
}
Обратите внимание, что ваше старое условие в for l oop count <= total
вызывает неопределенное поведение, так как вы получаете доступ На 1 элемент правее.
Я также забыл упомянуть, но я думаю, что вы читали это в других ответах ... вам нужно переместить строку, когда вы установите значение min
и max
до первого числа в массиве ПОСЛЕ того, как вы прочитаете массив. Наличие min = array[0]
до того, как вы прочитали любой ввод, установит значение мусора на min
и затем выдаст неопределенное поведение.
Редактировать: если вы не уверены, что все входные последовательности заканчиваются на 0
Вы должны изменить условие for, чтобы также проверять последний элемент, который в данном случае не является 0
. Вы можете сделать это, просто заменив условие for l oop:
// until here the code is the same.
for (count = 0; count < total-(total != SIZE); count ++)
// and from here the code is the same.
При этом ваш код должен вести себя следующим образом:
- Если
SIZE
10, и вы вводите числа: 1, 2, 3, 4, 0
, для l oop будут проверяться только 1
, 2
, 3
и 4
. - Если
SIZE
равно 10 и вы вводите числа: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
, для l oop проверит все числа, потому что выражение (total != SIZE)
оценивается как 0
и, следовательно, total-(total != SIZE)
совпадает с total-0
.