Прежде всего, вы (должны) хотеть цикл while(true)
, а не цикл while(std::ostream)
.
Так что замените
while (cout << "Enter a year (or negative number to quit): ")
{
на
while (true)
{
cout << "Enter a year (or negative number to quit): ";
Как указал @paddy, вы можете проверить тип возвращаемого значения std :: ostream, чтобы найти ошибки при печати.Но в этой простой программе я сомневаюсь, что это необходимо.
Тогда у вас есть break
вне вашего оператора if, который всегда будет выходить из программы (независимо от ввода).Замените
if (leap_year(year) == false && year <0 )
{
cout << "Bye!" << endl;
}
break;
на
if (year < 0)
{
cout << "Bye!" << endl;
break;
}
(нет необходимости проверять, является ли отрицательный ввод високосным годом. Вы можете ввести только 1 if
-значение с if-else
statments , поэтому вы также можете заменить if(leap_year(year) == false && year < 0)
на if (year < 0)
, как я.)
Когда вы примените это ко всем операторам (не изменяя их внутреннюю логику) и удалитеreturn 0;
в конце цикла вы получаете желаемый поток программ.Также лучше удалить using namespace std;
(читайте здесь почему).Вам также не нужно включать <iomanip>
, <cmath>
или <string>
.Полный код:
#include <iostream>
bool leap_year(int year);
int main() {
int year;
while (true) {
std::cout << "Enter a year (or negative number to quit): ";
std::cin >> year;
if (year < 0) {
std::cout << "Bye!" << std::endl;
break;
}
else if (leap_year(year)) {
std::cout << "The year is a leap year." << std::endl;
}
else {
std::cout << "The year is not a leap year." << std::endl;
}
}
}
bool leap_year(int year){
bool is_leap_year = false;
if (year % 4 == 0){
is_leap_year = true;
}
if (year % 100 == 0){
is_leap_year = false;
}
if (year % 400 == 0){
is_leap_year = true;
}
return is_leap_year;
}