C ++ программа для проверки, является ли ввод високосным годом - PullRequest
0 голосов
/ 05 декабря 2018

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

В следующих кодах я пытаюсь создать функцию 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;
}

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Прежде всего, вы (должны) хотеть цикл 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;
}
0 голосов
/ 05 декабря 2018
#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;
}
...