C ++ программа для проверки, является ли ввод високосным годом

Я Тони, и я новичок в программировании на С ++. Я хотел бы задать вопрос, связанный с созданием программы для проверки високосного года.

В следующих кодах я пытаюсь создать функцию bool, чтобы проверить, является ли ввод високосным годом. Если вход отрицательный, я буду cout «Пока!» и немедленно остановите программу. Если вход положительный, то я проверю, является ли это високосным годом, используя построенную мной функцию bool, пока вход не станет отрицательным числом, а затем выйду из программы.

Тем не менее, я не могу найти, какие ошибки я допустил, и в текущей ситуации, когда я ввожу положительное значение, результат не генерируется. Пожалуйста, помогите, если вы доступны. Большое спасибо тебе. 🙂

#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>

using namespace std;
bool leap_year(int year);
int main()
{
int year;
while (cout << "Enter a year (or negative number to quit): ")
{
cin >> year;
if (leap_year(year) == false && year <0 )
{
cout << "Bye!" << endl;
}
break;
if (leap_year(year) == false && year >0 )
{
cout << "The year is not a leap year." << endl;
}
if (leap_year(year) == true && year >0 )
{
cout << "The year is a leap year." << endl;
}
return 0;
}
}
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;
}

-1

Решение

Прежде всего, вы (должны) хотеть 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;
}
1

Другие решения

#include <iostream>
using namespace std;

bool leap_year(int year) {
return year % 400 == 0 || (year % 100 != 0 && year % 4 == 0);
}

int main() {
int year;
while (cout << "Enter a year (or negative number to quit): ") {
cin >> year;
if (year < 0) { // the number is negative, our criteria to quit
cout << "Bye!" << endl;
// returns from main() and hence terminates the program
return 0;
}
if (leap_year(year)) { // The check should be done only once
cout << "The year is a leap year." << endl;
} else {
cout << "The year is not a leap year." << endl;
}
}
return 0;
}
-1

По вопросам рекламы [email protected]