2016-05-06 2 views
-1

Я написал программу, которая, учитывая число месяца и год, возвращает количество дней в этом месяце:возвращает количество дней в данном месяце данного года

#include <iostream.h> 
#include <conio.h> 
void main() { 
    clrscr(); 
    int month, year, i; 
    cout << "give the year \n"; 
    cin >> year; 
    cout << "give the month\n"; 
    cin >> month; 
    for (i = 1; i <= 12; i++) { 
    i = month; 
    switch (month) { 
     case 1: 
     cout << "number of day in month is 31\n"; 
     break; 
     case 2: 
     if (year % 4 == 0) { 
      cout << "the number of days is 29 \n"; 
     } else { 
      cout << "the number of days is 28 \n"; 
     } 
     break; 
     case 3, 5, 7, 8, 10, 12: 
     cout << "the number of days is 31 \n"; 
     break; 
     default: 
     cout << "the number of days is 30 \n"; 
     return; 
    } 
    } 
    return; 
} 

Когда я даю месяц номер 3, он возвращает the number of days is 31, поэтому он отлично работает. Но когда я даю 1 или 2, выход

number of day in month is 31 
number of day in month is 31 
number of day in month is 31 
. 
. 
. 
. 

Как я могу сделать это только вернуть number of day in month is 31 или number of day in month is 28 если дело 2?

+1

'если это (год% 4 == 0) {cout << "количество дней равно 29 \ n";} '. Нет, если '(year% 100) == 0', если' (year% 400) == 0' также верен. См. Https://en.wikipedia.org/wiki/Leap_year: * Каждый год, который точно делится на четыре, представляет собой високосный год, за исключением лет, которые точно делятся на 100, но эти лет созвездия - это високосные годы, если они точно делится на 400. Например, 1700, 1800 и 1900 годы не являются високосными годами, но 2000 год. * –

+0

, но это (год% 4 == 0) в скрипте не% 100 –

+0

@AndrewHenle как исправить повторение в случае 1 и 2 –

ответ

2

Не повторяйте расчет/не используйте петлю. Правильно используйте синтаксис корпуса коммутатора.

И ваш расчет високосного года неверен. Это должно быть так:

if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)){ 
    cout << "the number of days is 29 \n"; 
} 
else { 
    cout << "the number of days is 28 \n"; 
} 

год является високосным, если он делится на 4, но не делится на 100 или он делится на 400

2

У вас есть цикл, где i проходит от 1 до 12.

Внутри этого цикла вы

switch (month) 

Но вы, вероятно, означает

switch (i) 

В противном случае вы просто повторив такой же расчет 12 раз.

+0

, поэтому я буду делать это с помощью переключателя без –

Смежные вопросы