Lisiy_egik, почему ты используешь такие угловатые конструкции (типа == false). Попробуй как бы написать словами, что ты хочешь сделать:
Код:
bool get_from_file(int& value); // здесь открывается и закрывается файл
void output(const int& value, bool prime); // здесь печатается текст
bool is_prime(const int& value); // только проверка на простоту
void error_message(const char*); // выдача сообщения в лог
int main()
{
init(); // здесь установить русскую кодировку
int value = 0; // значение
if (get_from_file(value)) // если взял значение value из файла
{
output(value, is_prime(value)); // вывел значение value и "простое оно или нет"
}
else
{
error_message("не могу прочитать значение");
}
}
в таком коде ввод, обработка и вывод разделены так, что ты можешь изменять каждую часть программы, независимо от другой. Например: ввод - просто присваивание числа. Вывод - вывод в диалоговом окне. Потом передумал - сделал ввод из файла. Программа продолжает работать без переделки других модулей. При этом текст программы написан почти на человеческом языке
ещё 2 подхода в булевым выражениям, облегчающие жизнь:
1. хитрая форма оператора if:
условие ? выражение_да : выражение_нет
выражение_да и выражение_нет должны иметь один тип данных
printf(is_prime ? "да" : "нет");
2. табличные функции. Пользуемся тем, что по правилам С++ (но не С), булевское выражение имеет значения 0 или 1. значит его можно использовать в качестве индекса массива из 2-х элементов
static const char* str_primes[2] = {"не простое", "простое"};
printf(primes[is_prime]);
если is_prime - не булевское, надо сделать приведение:
printf(primes[bool(is_prime)]);