Podstawy c++.zabezpiecznie przed bledem .

0

Oto jest kod :

 ##include<iostream>
#include <cstdlib>
#include <ctime>
    int main() {
  using namespace std;
  cout << "Losowanie liczb.";
  srand(time(NULL));
  int number;

  int fate;
  fate = rand() % 20 + 1;

  int i = 0;
  for (;;) {
    cout << "Podaj liczbe:";

    while (!(cin >> number)) {
      cout<<"Niepoprawna liczba.jescze raz:";
      cin.clear();
      cin.sync();
    }

    ++i;
    if ((number > 20) || (number < 1)) {
      cout << "Liczba nie z tego przedzialu!" << endl;
      i = i - 1;
    } else if (number < fate) {
      cout << "Za malo,sprobuj jeszcze raz(" << i << " proba):" << endl;
    } else if (number > fate) {
      cout << "Za duzo.jeszcze raz(" << i << " proba):" << endl;
    } else if (number == fate) {
      cout << "Wreszcie (za" << i << " proba)";
      break;
    }
  }
}

czy zostal wykonany poprawnie,program ?
http://uploads.im/yLm1N.png -> i jak temu zaradzic,po wpisaniu np.3f program wypisuje komunikat bledu ,a nie chce zeby to robil jak temu zaradzic?

a to tak na marginesie: dlaczego warunek while (!(cin >>number)) wpisuje wartosc do number przeciez on jest wydzielony tylko po to aby w razie bledu wyczyscic

0

ja bym się tym nie kłopotał, pisanie funkcji które odpowiednio ogarniają std::cin jest niepotrzebne i niczego Cię nie nauczy
lepiej naucz się wprowadzania danych z klawiatury na jakimś ui przykładowo Qt, tam możesz ustawiać typ danych jakie widget wybrany przez Ciebie może akceptować

edit:
a dla std::cin zwyczajnie wprowadzaj odpowiednie ciągi znaków, tak aby móc kontynuować naukę (jakąkolwiek tam prowadzisz)

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