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

Poziom 1 Obsługa strumienia wejściowego

Ostatnio zmodyfikowano 2019-10-08 19:51
Autor Wiadomość
Przemek978
Temat założony przez niniejszego użytkownika
Poziom 1 Obsługa strumienia wejściowego
» 2018-08-05 15:08:28
Napisz program, który wczyta trzy liczby rzeczywiste, a na końcu programu je wszystkie wypisze. Zadbaj o to, by bufor strumienia wejściowego był za każdym razem czyszczony. Wynik końcowy powinien również zawierać informacje czy wczytanie danej liczby się powiodło.
Przykładowe dane wejściowe
13.3
tak 123
33.22nie

Przykładowe dane wyjściowe
Liczba pierwsza to: 13.3. Wczytano? 1.
Liczba druga to: 0. Wczytano? 0.
Liczba trzecia to: 33.22. Wczytano? 1.

co zrobić by po podaniu drugiej zmiennej z błędem tak jak powyżej nie kończyło programu

#include <iostream>
#include <limits>


int main ()
{
    float a;
    bool b = std::cin.fail();
    float c;

    std::cout << "Podaj dana: "; std::cin >> a;
    std::cout << "Podaj dana: "; std::cin >> b;
    std::cout << "Podaj dana: "; std::cin >> c;

    std::cout << "Liczba pierwsza to: " << a << std::endl;
    std::cout << "Wczytano?" <<
    std::cin.fail() << std::endl;

    std::cout << "Liczba druga to: " << b << std::endl;
    std::cout << "Wczytano?"  <<
    std::cin.ignore( 1000, '\n') << std::endl;

    std::cout << "Liczba trzecia to: " << c << std::endl;
    std::cout << "Wczytano?" <<std::cin.fail() <<std::endl;
    std::cin.clear();
    return 0;
}
P-172021
pekfos
» 2018-08-05 17:37:28
Całkowicie zignorowałeś punkt "Czyszczenie zawartości strumienia wejściowego" w tej lekcji, oraz wskazówkę do zadania.
P-172022
Przemek978
Temat założony przez niniejszego użytkownika
Odpowiedź pekfos
» 2018-08-06 22:27:30
Nie zignorowałem tylko tam nie ma dokładnie opisanego gdzie użyć tych komend
P-172025
pekfos
» 2018-08-06 22:51:33
Jest dokładnie opisane ich działanie i jest podany przykład. Jeśli zrozumiałeś działanie, przykład nie jest nawet potrzebny.
P-172026
Przemek978
Temat założony przez niniejszego użytkownika
» 2018-08-09 13:06:28
Zrozumiałem i używałem tych komend na wiele sposobów i dalej ten sam problem mógłbyś zobaczyć gdzie zrobiłem błąd
P-172039
pekfos
» 2018-08-09 13:22:55
Zadbaj o to, by bufor strumienia wejściowego był za każdym razem czyszczony.
C/C++
std::cout << "Podaj dana: "; std::cin >> a;
std::cout << "Podaj dana: "; std::cin >> b;
std::cout << "Podaj dana: "; std::cin >> c;
Nie ma tu nic 'za każdym razem'. Inaczej byłoby to widoczne między wczytywaniem a i b, oraz b i c.

co zrobić by po podaniu drugiej zmiennej z błędem tak jak powyżej nie kończyło programu
Kilka fragmentów z lekcji:
Jeżeli coś zakończy się niepowodzeniem, strumień przechodzi w stan błędu i dalsze operacje na strumieniu są ignorowane.
w pierwszej kolejności trzeba wyczyścić flagi błędów w strumieniu, ponieważ stan sprawi, że inne operacje po prostu nie zadziałają. Służy do tego metoda std::cin.clear(). Gdy już możemy wykonywać operacje na strumieniu, należy odrzucić dane które wywołały błąd.
No i był jeszcze ten przykład
C/C++
int liczba;
std::cin >> liczba;
bool bCzyBlad = std::cin.fail();
std::cin.clear();
std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
Tak wygląda wczytanie jednej liczby, z wyczyszczeniem strumienia i zachowaniem informacji, czy był błąd. Jak chcesz wczytać 3 liczby, to zapewne chcesz ten kod mieć 3 razy, na trzech zmiennych int i trzech bool, o czym też mówi wskazówka do zadania
Informacje o poprawnym (albo niepoprawnym) wczytaniu danych należy przechować w dodatkowych zmiennych typu bool.
Wydaje się, że wszystkie potrzebne informacje są podane, ale: niedawno ta lekcja została przerobiona i część o obsłudze błędów była pisana od nowa. Niewykluczone, że coś może być niezbyt zrozumiałe, biorąc pod uwagę, że ta lekcja jest bardzo wcześnie w kursie. Konstruktywna krytyka jest mile widziana.
P-172040
Przemek978
Temat założony przez niniejszego użytkownika
» 2018-08-12 13:11:21
A mógłbyś jeszcze napisać gdzie w kodzie to wstawić bo wyskakuje mi błąd  bool bCzyBlad
P-172080
pekfos
» 2018-08-12 13:15:29
Jak nie podajesz kodu, to o błędach nie masz po co wspominać.
P-172081
« 1 » 2
  Strona 1 z 2 Następna strona