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

Lekcja 9 std::cin.clear()

Ostatnio zmodyfikowano 2013-09-01 23:22
Autor Wiadomość
Pawelek
Temat założony przez niniejszego użytkownika
Lekcja 9 std::cin.clear()
» 2013-08-29 22:04:03
Witam.

Mam problem z jedna z prac domowych w 9 lekcjii
Bardzo prosil bym o mala pomoc.

Zadanie domowe
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.
moj program wyglda nastepujaca
C/C++
#include <iostream>
int main()
{
    float liczba1;
    int liczba2;
    float liczba3;
   
    std::cout << "Podaj pierwsza liczbe=";
    std::cin >> liczba1;
    std::cin.clear();
   
    std::cout << "Podaj druga Liczbe=";
    std::cin >> liczba2;
    std::cin.clear();
   
    std::cout << "Podaj trezcia liczbe=";
    std::cin >> liczba3;
    std::cin.clear();
   
    std::cout << "lcizba pierwsza to:" << liczba1 << std::endl;
    std::cout << "Udalo sie\t" << std::cin.good() << std::endl;
   
    std::cout << "liczba druga to:" << liczba2 << std::endl;
    std::cout << "udalo sie\t" << std::cin.good() << std::endl;
   
    std::cout << "liczba trzecia to:" << liczba3 << std::endl;
    std::cout << "udalo sie\t" << std::cin.good() << std::endl;
   
    return 0;
}

zaladujac go oraz wpisujac 2 niewiadoma z tak 123 nieczysci mi strumienia wejsciowego i wyskakuje blad.
Prosze o pomoc Pozdrawiam :)
P-91224
Paweu
...
» 2013-08-30 08:35:50
Nie wiem czy to chodzi o to, bo dopiero skończyłem tą lekcję i jestem w sumie jeszcze zielony ale myślę, że dodanie linijki
std::cin.sync();
 przy każdym czyszczeniu bufora powinno załatwić sprawę ;) Jeśli się mylę to przepraszam.
P-91244
pekfos
» 2013-08-30 08:55:05
Samo wyczyszczenie flag błędu nic nie da, jeśli przyczyna błędu nie została poprawiona, tj błędne dane wciąż są w strumieniu. Brakuje sync(). Dodatkowo wszystkie wywołania good() są tu bez sensu, bo przecież clear() czyści flagi błędów.
P-91246
Pawelek
Temat założony przez niniejszego użytkownika
» 2013-08-30 18:34:47
Okey dzieki wielkie postaram sie poprawic i zobacze:) a w jaki sposob mam napisal program ktory mi pokarze czy dane zostaly poprawnie wczytane jak clear czysci mi flage ??
P-91279
pekfos
» 2013-08-30 18:43:51
Użyj zmiennych?
P-91280
Pawelek
Temat założony przez niniejszego użytkownika
» 2013-08-30 23:28:33
okey dzieki za pomoc biore sie do roboty :)
P-91297
Pawelek
Temat założony przez niniejszego użytkownika
» 2013-09-01 21:56:28
Napisalem ten proram troszeczke inaczej lecz ciagle jest jeden problem.

niewiem w jaki sposob mam zrobic aby pokazalo czy liczba zostala poprawnie wczytana ja to sobie w ten sposob wyobrazalem lecz niestety zawsze wysakkuje poprawnie:(
C/C++
#include <iostream>
int main()
{
    float liczba1;
    float liczba2;
    float liczba3;
    bool Udalosie = std::cin.good();
   
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj pierwsza liczbe=";
    std::cin >> liczba1;
    std::cout << "Udalo sie:" << Udalosie << std::endl;
   
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj druga Liczbe=";
    std::cin >> liczba2;
    std::cout << "Udalo sie:" << Udalosie << std::endl;
   
    std::cin.clear();
    std::cin.sync();
    std::cout << "Podaj trezcia liczbe=";
    std::cin >> liczba3;
    std::cout << "Udalo sie:" << Udalosie << std::endl;
   
   
    std::cout << "lcizba pierwsza to:" << liczba1 << std::endl;
   
   
    std::cout << "liczba druga to:" << liczba2 << std::endl;
   
   
    std::cout << "liczba trzecia to:" << liczba3 << std::endl;
   
   
    return 0;
}
rezultat po wcyztaniu 2 powinno wyskoczyc ze zostala niepoprawnie wczytana lecz umnie zostaje poprawnie wcyztana :( nieiwm jak to zrobic juz kilka mozliwosci probowalem prosil bym o pomoc Pozdrawiam:)
P-91407
SeaMonster131
» 2013-09-01 22:02:57
Sprawdzaj czy udało się wczytać liczbę po każdym wpisaniu ciągu znaków.
P-91408
« 1 » 2
  Strona 1 z 2 Następna strona