Алгоритм в функции get_positive_int()
неверен:
Вам необходимо поместить i = get_int("Integer: ");
внутри while
l oop.
Ваше if
условие:
if (i < 1)
неверно, так как это вернет i
, если i
является отрицательным целым числом или 0
. Если вы хотите вернуть i
, когда i
является положительным целым числом или 0
, вы должны использовать if(i >= 0)
.
Обратите внимание, что вы также можете поместить:
if (i == INT_MAX)
{
// optional error handling.
return INT_MAX;
}
после вызова, чтобы сохранить возникновение ошибки чтения. Но если вы хотите вернуть только INT_MAX
, вам не нужно этого делать, и вы можете его пропустить, поскольку это будет соответствовать условному выражению `` if (i> = 0) `и его телу.
Тогда код:
int get_positive_int(void)
{
int i;
while (true)
{
i = get_int("Integer: ");
if (i == INT_MAX)
{
// optional error handling.
return INT_MAX;
}
else if (i >= 0)
{
return i;
}
printf("%i", i);
}
}
Примечание: если вы не хотите считать 0
как положительное целое число, вы должны иметь i >= 1
в качестве условия if
оператор.
Как вы сказали в комментариях, вы хотите продолжить, только если i
- положительное целое число, и выход, если i
- отрицательные символы или 0
:
void get_positive_int(void)
{
int i;
while (true)
{
i = get_int("Integer: ");
if (i < 1)
{
return;
}
printf("%i\n", i);
}
}
Обратите внимание, что в этом случае тип возвращаемого значения get_positive_int
должен быть void
вместо int
, и он не должен возвращать i
, так как нет необходимости возвращать какое-либо значение из функции.