Dziwne wysypywanie programu.

0

Mam taki problem, że kiedy wpisuję np: 2e to wysypuje się program , a gdy wpisze np 5e to wtedy normalnie dziala. Ogolnie to robię program ktory po wpisaniu numeru miesiąca wyświetla ile ten miesiąc ma dni. Największy problem jest z lutym, ponieważ w tej części trzeba jeszcze zapytać o rok i program po wpisaniu nieprawidlowej frazy( 2e ) nie wykonuje się do końca. A z tego co wiem program powinien automatycznie odciąć niepotrzebną literę na końcu. Dopiero zaczynam swoją przygodę z c++ , więc prosilbym o wyrozumialość.
Z góry dziękuję za pomoc.

#include <iostream> 
#include <cstdlib>

using namespace std;
int nr_miesiaca,rok;
int main()
{
cout<<"Wpisz numer miesiac:";
  if (!(cin>>nr_miesiaca))
  {
      cerr<<"To nie jest liczba!";
      exit(0);
  }

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:
        cout<<"Luty ma 28 dni lub 29 dni.Zaleznie od roku ;)"<<endl;
        cout<<"Podaj obecny rok:";
        cin>>rok;
        if (((rok%4 == 0)&& (rok%100 != 0)) || (rok%400 == 0))
        {
            cout<<"W "<<rok<<" Luty ma 29 dni.";
        }
        else{
           cout<<"W "<<rok<<" Luty ma 28 dni.";
        }
    break;
    default: cout<<"Nieprawidlowy numer miesiaca";
    break;
       }
    return 0;
}
0

Jeżeli zależy Ci na tym, żeby dało się wprowadzać śmieci które nie będą potem wpływały na dalsze odpowiedzi, to użyj getline lub czyść cin za każdym razem.
Tutaj przykład na twoim kodzie:

#include <iostream>
#include <cstdlib>
#include <string>
#include <sstream>

using namespace std;

int input_int() {
	string line;
	getline(cin, line);
	stringstream ss { line };
	int result;
	ss >> result;
	return result;
}

int main() {
	cout<<"Wpisz numer miesiac:";
	int nr_miesiaca = input_int();
	
	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: {
			cout<<"Luty ma 28 dni lub 29 dni.Zaleznie od roku ;)"<<endl;
			cout<<"Podaj obecny rok:";
			int rok = input_int();
			if ((rok%4 == 0 && rok%100 != 0) || rok%400 == 0) {
				cout<<"W "<<rok<<" Luty ma 29 dni.";
			} else {
				cout<<"W "<<rok<<" Luty ma 28 dni.";
			}
			break;
		}
		default:
			cout<<"Nieprawidlowy numer miesiaca";
			break;
	}
	return 0;
}

btw, if (!(cin>>nr_miesiaca)) w ten sposób nie sprawdzasz czy wprowadzony nr_miesiaca to liczba, tylko czy ustawiony w cin nie został failbit lub badbit

0

@spartanPAGE: dziękuję za odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1