Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rozdział 17 - pierwsze zadanie domowe

Ostatnio zmodyfikowano 2016-07-21 21:09
Autor Wiadomość
Norbix
Temat założony przez niniejszego użytkownika
» 2016-07-21 19:00:02
Dlatego że nie jestem w stanie zrozumieć sposobu zabezpieczenia programu przez użytkownika carlosmay, postanowiłem wczytać się w poprzedni rozdział gdzie znalazłem sposób na zabezpieczenie programu przed wpisaniem litery.

C/C++
#include <iostream>

using namespace std;


int wczytajLiczbe()
{
    int liczba;
    cin >> liczba;
    if( cin.fail() )
    {
        cout << "Podales niewlasciwa liczbe." << endl;
    }
    return liczba;
}

int main()
{
    while( true )
    {
        std::cout << "Podaj liczbe: ";
        int liczba = wczytajLiczbe();
        std::cout << "Podales liczbe: " << liczba << std::endl;
    }
    return 0;
   
}

Działanie programu będzie wyglądać następująco:
Podaj liczbe: a
Podales niewlasciwa liczbe.
Podales liczbe: 0

Jak poprawnie napisać funkcję aby po złym wczytaniu nie została zwrócona wartość 0?
Wiem, że kompilator czyta linijki z góry do dołu.
Po dalszym namyśle, zacząłem kombinować na różne sposoby, na przykład na ten:
C/C++
int wczytajLiczbe()
{
    int liczba;
    cin >> liczba;
    if( cin.good() )
    {
        cout << liczba << endl;
    }
    else if( cin.fail() )
    {
        cout << "Podales niewlasciwa liczbe." << endl;
    }
   
}
Lecz w tym sposobie nawet jak podam liczbę, to program wyda mi jako liczbę 4757824.

Chciałem również aby program się powtarzał, więc w funkcji main wprowadziłem pętle while, która nie wiem z jakiego powodu po prostu się nie wykonuję. (Program po jednorazowym użyciu się kończy)

P-150189
Szymon2727
» 2016-07-21 21:09:43
Bo std::cin.fail() działa tak samo jak std::cin.good(), ponieważ są to funkcje bool - zwrócą Ci jedynie true albo false, a to już zależy od tego co podałeś w strumieniu. To co podał carlos jest przykładem z owego działu, który omawia tę funkcję, jednak z takim haczykiem, że zadziała to również na linuksie ;)
P-150192
1 « 2 »
Poprzednia strona Strona 2 z 2