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

Zadanie domowe rozdział 15

Ostatnio zmodyfikowano 2014-12-06 19:30
Autor Wiadomość
Hatifnacior
Temat założony przez niniejszego użytkownika
Zadanie domowe rozdział 15
» 2014-12-06 19:18:25
Napisz program, który wczyta liczbę, a następnie wypisze ją na ekranie. Zabezpiecz przed wczytaniem nieprawidłowej liczby. Wykorzystaj do tego celu wiedzę z jednego z poprzednich rozdziałów. Sposób działania programu:
1. Podaj liczbę
2. Jeżeli błąd, wróć do kroku 1.
3. Wypisz liczbę, która została podana.

"Rozwiązałem" zadanie na 2 sposoby:

1:

#include <iostream>
int main()
{
    int liczba;
    bool wczytano;
    do
    {
        std::cout << "Podaj liczbe: " << std::endl;
        std::cin >> liczba;
        std::cin.clear();
        std::cin.sync();
        std::cout << std::cin.good() << std::endl;
        std::cout << "Podales liczbe: " << liczba << std::endl;
        wczytano = liczba;
    } while(wczytano != 1);
    return 0;
}

Program działa dobrze do momentu podania liczby 0 :)

2:

#include <iostream>
int main()
{
    int liczba;
    bool wczytano;
    do
    {
        std::cout << "Podaj liczbe: " << std::endl;
        std::cin >> liczba;
        std::cout << "Czy liczba jest poprawna? " << std::cin.good() << std::endl;
        wczytano = std::cin.good();
        switch( wczytano )
        {
            case true:
            std::cout << "Podana liczba to: " << liczba << std::endl;
            break;
            case false:
            std::cout << "Blad, podaj liczbe: " << std::endl;
            break;
        }
    } while( wczytano != 1);
    return 0;
}

W momencie podania liczby całkowitej program działa dobrze, kiedy wprowadzam znak (literę) pętla działa w nieskończoność i niemożliwe jet podanie kolejnej liczby. Dlaczego?

#include <iostream>
int main()
{
    int liczba;
    bool wczytano;
    do
    {
        std::cout << "Podaj liczbe: " << std::endl;
        std::cin >> liczba;
        std::cout << "Czy liczba jest poprawna? " << std::cin.good() << std::endl;
        wczytano = std::cin.good();
        std::cin.clear();
        std::cin.sync();
        switch( wczytano )
        {
            case true:
            std::cout << "Podana liczba to: " << liczba << std::endl;
            break;
            case false:
            std::cout << "Blad, podaj liczbe: " << std::endl;
            break;
        }
    } while( wczytano != 1);
    return 0;
}

Program działa. Dzięki za odpowiedź, zamykam temat.
P-122385
Kaikso
» 2014-12-06 19:28:55
Wczytujesz dwukrotnie i nie wyczyściłeś bufora.
P-122388
Rashmistrz
» 2014-12-06 19:30:25
C/C++
switch( wczytano )
{
case true:
    std::cout << "Podana liczba to: " << liczba << std::endl;
    break;
case false:
    std::cout << "Blad, podaj liczbe: " << std::endl;
    break;

» Kurs C++ » Poziom 1Instrukcja warunkowa if ... else lekcja

W drugim "rozwiązaniu" nie czyścisz
bufora i resetujesz flag...
» Kurs C++ » Poziom 1Obsługa strumienia wejściowego lekcja:
"Czyszczenie zawartości strumienia wejściowego"
P-122389
« 1 »
  Strona 1 z 1