Witam, Mirosław mówił w odcinku z walidacją mówił, że że instrukcja default w switch-u obsługuje tylko pomysłki w liczbach poaza zakresu naszych opcji, a walidacja pozwala nam na obsługę błędu poprzez podanie innych znaków zamiast liczby. Jednak w tym programie:
cout<<"Podaj numer miesiaca: ";
if(!(cin>>nr_miesiaca)) //ZAMIAST CIN>>NR_MIESIACA;
{
cerr<<"To nie liczba!"; //OBSLUGA BLEDOW
}
switch(nr_miesiaca)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
cout<<"Ten miesiac ma 31 dni";
break;
case 4:
case 6:
case 9:
case 11:
cout<<"Ten miesiac ma 30 dni";
break;
case 2:
{
int rok;
cout<<"Podaj rok: ";
cin>>rok;
if((rok%4==0 && rok%100!=0) || rok%400==0)
cout<<"Ten miesiac ma 29 dni";
else cout<<"Ten miesiac ma 28 dni";
}
break;
default: cout<<"ERROR";
}
w przypadku, gdy usunę tego całego if-a i dane zapisze normalnie za pomocą cin to błąd związany z tym, że zamiast liczby wprowadze inny znak zostaje normalnie obsłużony przez default. Dlaczego wtedy mamy używać cerr skoro default działa w poprzednio omówionym przypadku?
Pozdrawiam.