• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak poprawnie korzystać z cin.good() cin.fail() itd?

VPS Starter Arubacloud
0 głosów
4,352 wizyt
pytanie zadane 11 września 2019 w C i C++ przez Tomasz Kryś Nowicjusz (120 p.)
Cześć!

Przychodzę z prośbą o pomoc. Uczę się podstaw C++ i w końcu trafiłem na większy problem.

Otóż piszę program "kalkulator" i wpadłem na pomysł, by użytkownik podczas podawanie liczb nie mógł wpisać liter, słów itd. tylko same liczby. Ewentualnie, po wpisaniu słowa wyskoczył napis o błędzie.

Nie wiem jak poprawnie użyć języka c++, aby to wykonać :/

2 odpowiedzi

+2 głosów
odpowiedź 11 września 2019 przez Inn Gaduła (4,300 p.)
edycja 12 września 2019 przez Inn
#include <iostream>

using namespace std;

int main()
{
    int Liczba;

    cout << "Wprowadz liczbe:";
    cin >> Liczba;

    while(cin.fail())
    {
        cout << "Wprowadziles bledne dane" << endl;
        
        cin.clear();
        cin.ignore(1000,'\n');
        
        cout << "Wprowadz dane ponownie:";
        cin >> Liczba;
    }

   return 0;
}

Więcej o tym sposobie możesz przeczytać tutaj.

+2 głosów
odpowiedź 12 września 2019 przez tkz Nałogowiec (42,000 p.)
edycja 12 września 2019 przez tkz

Niby piszesz coś o good i fail, ale myślę, że to też dobry wybór. 

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

int main()
{
    std::string line;
    double number;
    while (std::getline(std::cin, line))
    {
        std::stringstream ss(line);
        if (ss >> number)
        {
            if (ss.eof())
            {   // Success
                break;
            }
        }
        std::cout << "Error!" << std::endl;
    }
    std::cout << "Finally: " << number << std::endl;
}

A jak chcesz koniecznie z tym

#include<iostream>
#include<limits>

int main()
{
    std::cout << "Enter an int: ";
    int x = 0;
    while(!(std::cin >> x)){
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        std::cout << "Invalid input.  Try again: ";
    }
    std::cout << "You enterd: " << x << std::endl;        
}

 

Podobne pytania

0 głosów
1 odpowiedź 2,448 wizyt
pytanie zadane 9 maja 2015 w C i C++ przez fibonacci Użytkownik (720 p.)
+2 głosów
1 odpowiedź 736 wizyt
pytanie zadane 1 lipca 2015 w C i C++ przez Lopez Początkujący (460 p.)
0 głosów
0 odpowiedzi 183 wizyt
pytanie zadane 27 czerwca 2018 w C i C++ przez Nowacx02 Obywatel (1,060 p.)

92,454 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...