Помимо ошибок return
и exit
у вас есть ошибка также в том, как вы используете целые и символы. isdigit
- это функция, которая применяется только к символам, и дает значение true, если символ находится в диапазоне от '0'
до '9'
, но следует знать, что символьная нотация в C - это всего лишь причудливый способ написания кодовой точки (большинство ASCII). времени). Поэтому, когда вы пишете '1'
в программе на C, компилятор увидит 49
, если вы напишите 'a'
, компилятор увидит в реальности 97
. Это означает, что isdigit
возвращает true
для значений от 48
до 57
, вероятно, не то, что вы хотели. В строке, где вы сравниваете divider
с '1'
, в действительности вы сравниваете его с 49
(кроме мэйнфрейма IBM, где '1'
равно 241
)
Ваш цикл бесконечен, он зависит от значения x, но x не изменяется в цикле, поэтому условие в это время никогда не может измениться.
РЕДАКТИРОВАТЬ: Здесь исправленный код
int is_prime(uint_t x)
{
uint_t divider;
if(x <= 3)
return 1;
for(divider = x-1; ; divider--) {
if(x % divider == 0)
return 0; //not prime
if(divider == 1)
return 1; //if divider reaches 1 then the number is prime
}
}