#include <iostream>
#include <conio.h>
#include <cmath>
using namespace std;
int d, m, g, S;
int main()
{
setlocale(LC_ALL, "Russian_Russia.1251");
cout « "Введите дату"; cin » d, m, g;
if (g >= 1, g <= 12);
{
cout « "g=" « endl;
}
else
{
cout « "Такого года нет" « endl;
}
switch (d, m, g)
{
if (m >= 1, m <= 12)
{
cout « "m=" « endl;
}
else
{
cout « " Такого месяца нет" « endl;
}
if (d >= 1, d <= 31)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12 :
cout « "Правильно" « endl;
}
else {
cout « "Неправильно" « endl;
}
if (d >= 1, d <= 30)
{
case 4:
case 6:
case 9:
case 11:
cout « "Правильно" « endl;
}
else {
cout « "Неправильно" « endl;
}
if (d >= 1, d <= 28)
{
case 2:
cout « "Правильно" « endl;
}
else {
cout « "Неправильно" « endl;
}
S = (d + 1, m + 1, g + 1);
cout « "S=" « endl; cin » S;
}
return 0;
}
У вас программа не работает, тк вместо << у вас французские кавычки.
Давно ли внутри switch можно делать if?
case
- это просто метка, на которую исполнение прыгает при соответствии условия. Локальность на все case
едина - это локальность switch
. Далее, после каждого case
уже можно организовать свою локальность. Собственно, именно поэтому определение локальных переменных просто под case
и сулит проблемами.int d, m, g, S;
switch (d, m, g)
int operator , ( int, int )
, какой у него эффект по умолчанию?switch(some)
{
if (some == other)
doOther();
case 1:
doCaseOne();
break;
default:
doDefault();
break;
}
switch(some)
{
case 1:
doCaseOne();
break;
default:
if (some == other)
doOther();
doDefault();
break;
}
d-день, m-месяц,g-год,S-следующий день
d
или day_number
?m
или month_number
?S
или next_day_number
?а switch получается показывает, какие переменные нужно проверять в условии, которое написано в case
switch
[?] и увидеть что проверка идет только для одного выражения. Я не просто так написал про int operator , ( int, int )
, по умолчанию comma operator возвращает только свой правый аргумент.switch (d, m, g)
эквивалентен switch (g)
.мне вроде удобно читать
Ввести день, месяц и год, проверить правильность введенной даты и вывести дату следующего дня.
case
. Чем в этом случае обделен if
?doOther();
никогда не выполнится потому что исполнение прыгает только на метки case
, но не перед ними. Исполнение дальше switch
не пойдет, а всегда только куда-нибудь прыгнет. И это IMHO не только работать, это даже компилироваться не будет.