Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Warning: control reaches end of non-void function [-Wreturn-type]

Александр Кротов Ученик (187), на голосовании 2 месяца назад
Здравствуйте! Подскажите, пожалуйста, как убрать ошибку
warning: control reaches end of non-void function [-Wreturn-type]
18 | }
| ^
в этом коде:

 #include  
#include
using namespace std;

bool is_prime(unsigned long long n)
{
int k = 0;
for (int i = 2; i <= sqrt(n); ++i)
{
if (n % i == 0)
{
return false;
k += 1;
break;
}
}
if (!k) return true;
}

int main()
{
unsigned long long n;
int k = 0;
cin >> n;

if (is_prime(n)) cout << n;
else
{
for (int i = 2; i <= sqrt(n); ++i)
{
if (n % i == 0)
{
if (is_prime(i)) cout << i;
break;
}
}
}

return 0;
}
Голосование за лучший ответ
mustachioedWimp Гуру (3700) 3 месяца назад
if (n % i == 0)
{
return false; //здесь будет выход из функции
k += 1; //?
break; //?
}
робот д24 Мудрец (19724) 3 месяца назад
У тебя после return false ничего работать не будет. Так как возвращается управление
Игорь Горохов Просветленный (21474) 3 месяца назад
Не думаю что проблема в return false. Ошибка указывает, что из функции is_prime нет однозначного выхода, из-за наличия условия "if (!k) return true" в самом конце функции.
Исправь это на "return !k" - и должно взлететь

P.s. А учитывая, что k - это int, а возвращаешь ты bool, то лучше "return k == 0" или что-то подходящее под логику функции, т.к. не особо вчитывался в алгоритм, иначе можно словить ошибку преобразования типов, если k будет больше одного (т.к. int в bool неявно может преобразоваться только в случае 0 - Ложь, 1 - Истина)
mustachioedWimpГуру (3700) 3 месяца назад
а как осмыслить выражение !k?
Игорь Горохов Просветленный (21474) mustachioedWimp, Интовые 0 и 1 могут преобразоваться в булевые Ложь и Истина. Поэтому выражение !k сможет отработать без ошибок в случае, когда int как раз будет 0 или 1. В остальном случае - вполне себе может вылететь исключение. Но тут зависит от языка и его версии, на самом деле.
Похожие вопросы