Zabezpieczenie przed podaniem liczb zmiennoprzecinkowych

0

Witam. Mam pytanie w jaki sposób zabezpieczyć program przed wpisywaniem liczb zmiennoprzecinkowych? Liczby pobrane mają być tylko całkowite. Liter mi nie pobiera, ale gdy wpisuje zmiennoprzecinkową wartość, to wypisuje mi ją na ekran, zamiast wołać o ponowne podanie liczby. Język to c++.

0
while(true) /* tu warunek */
  {
   int value;
   if(cin>>value) { /* poprawne wprowadzenie */ }
   else
     {
      cin.clear();
      while(cin.get()!='\n') {}
      cout<<"Niepoprawne wprowadzenie"<<endl<<endl; /* ten wiersz można usunąć */
     }
  }
0

Nie wiem czy jesteś w stanie to ładnie zrobić. Do głowy przychodzą mi dwa rozwiązania:

  1. sprawdzenie round(wczytane) == wczytane, ale to rozwiązanie będzie precyzyjne dla |x| < 253 na większości platform,

  2. wczytywanie znaków pojedynczo i weryfikacja np. za pomocą isdigit.

0

Przez cin.fail nie da rady niestety. Przy jakichś obliczeniach jak wpisze np. 7.45, to wyświetla mi 7.45, ale do obliczeń użyje 7. Ale to ma sprawdzać czy użytkownik podał prawidłową liczbę całkowitą a nie sobie samemu rzutować do int-a. Gdzieś ktoś pisał o zamianie liczby na string, i sprawdzanie znak po znaku. Ale w takim razie musiałbym zadeklarować zmienną float zamiast int.
Więc szukam krótszego rozwiązania.
Chyba jednak nic innego mi nie zostało niż użycie isdigit, lub najpierw string-a, a później sprawdzanie znak po znaku, i zamiana poprawnej liczby w formacie stringa na int.

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