#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 не только работать, это даже компилироваться не будет.
if ((g >= 0) && (g <= 2021))
{
cout « "year: ok" « endl;
}
else
{
cout « "year: error" « endl;
}
if ((m >= 1) && (m <= 12))
{
cout « "month: ok" « endl;
}
else
{
cout « "month: error" « endl;
}
switch(m)
{
case 1:
cout « "january" « endl;
break;
case 2:
cout « "february" « endl;
break;
// etc...
}
// to be continued...