bool perfectNumber(number);
Это не вызывает функцию perfectNumber
;он объявляет локальную переменную с именем perfectNumber
типа bool
и инициализирует ее значением number
, преобразованным в тип bool
.
Для вызова функции perfectNumber
вам необходимоиспользуйте что-то вроде:
bool result = perfectNumber(number);
или:
bool result(perfectNumber(number));
С другой стороны: если вы собираетесь читать входные данные из потока (например, cin>>number
), вы должныубедитесь, что извлечение значения из потока прошло успешно.Как и сейчас, если вы наберете asdf
, извлечение завершится неудачно и number
останется неинициализированным.Лучший способ проверить, успешно ли выполняется извлечение, - это просто проверить состояние потока:
if (cin >> number) {
bool result = perfectNumber(number);
}
else {
// input operation failed; handle the error as appropriate
}
Подробнее о том, как состояния ошибок потока устанавливаются и сбрасываются, можно узнать в Семантика флагов наbasic_ios
.Вы также должны проконсультироваться с хорошей вводной книгой по C ++ , чтобы узнать о лучших практиках использования потоков.