Ответ на ваш вопрос заключается в том, что, как отмечали многие другие, вы используете низший в качестве логического типа вместо числового типа, такого как int , что будет гармонировать с остальной частью вашей программы.
bool lowest;
Логические типы, как и ожидалось, могут содержать в основном два состояния: true и false . По историческим причинам (то есть, в основном из-за наследования C ), логические значения были связаны с целыми числами, для которых 0 означало false, а любое другое значение означало true.
Вот почему тип Boolean по-прежнему совместим с целыми числами (это способ сказать это), и когда вы присваиваете ему ноль, он остается ложным. Если вы назначите ему любое другое значение типа int, оно останется верным. Это происходит в следующих строках:
lowest = myNumbers[0];
Наконец, когда вы выполните:
printf("\n%d", lowest);
Происходит обратный процесс, и true преобразуется в int (поскольку вы указали % d в строке формата printf ) и true преобразуется в 1, что является целочисленным значением по умолчанию для true в типе bool , когда его целочисленное значение: (int) true
(в вашей программе: (int) lowest
) спрашивается.
Как вы можете себе представить, более чем в 90% случаев входные целочисленные значения будут отличаться от нуля, поэтому вы получаете 1, независимо от ввода.