[Lekcja 9] Problem z zadaniem - coś mi źle wychodzi :)
Ostatnio zmodyfikowano 2015-07-03 15:01
Deivid Temat założony przez niniejszego użytkownika |
[Lekcja 9] Problem z zadaniem - coś mi źle wychodzi :) » 2015-07-02 14:00:43 Witajcie, postanowiłem rozpocząć naukę C++. Tak więc spotkacie jeszcze wiele "głupich" pytań z mojej strony. A oto pierwsze z nich: Co robię źle? Poniżej wklejam link mojego programu: (bez czyszczenia bufora) #include <iostream> using namespace std;;
int main() { float a, b, c; bool sukces1, sukces2, sukces3; cout << "Podaj 3 liczby rzeczywiste: a, b, c:" << endl; cout << "Podaj a: "; cin >> a; cout << "Podaj b: "; cin >> b; cout << "Podaj c: "; cin >> c; sukces1 = cin.good(); sukces2 = cin.good(); sukces3 = cin.good(); cout << "Liczba 'a' to: " << a << " Udalo sie wczytac? " << sukces1 << endl; cout << "Liczba 'b' to: " << b << " Udalo sie wczytac? " << sukces2 << endl; cout << "Liczba 'c' to: " << c << " Udalo sie wczytac? " << sukces3 << endl; return 0; }
Wydaje mi się że po każdym powinno być: cin.clear(); cin.sync(); I pytanie czy musze deklarować 3 zmienne bool i przypisywać im wartości cin.good() czy wystarczy tylko jedna? Poproszę o sugestię :) |
|
darko202 |
» 2015-07-02 14:15:16 1. tak po każdym cin >> a; //itd powinno być:
cin.clear(); cin.sync(); ale wpływa na stan cin.good(); cin.fail() i jeśli przed trzeba pamiętać stan to najpierw musisz wykonać cin.good();
2. przeczytaj jeszcze raz o odczytywaniu stanu strumienia po wczytaniu
sukces1 = cin.good(); sukces2 = cin.good(); sukces3 = cin.good(); zastanów się czy stan strumienia mógł się zmienić ?
|
|
Deivid Temat założony przez niniejszego użytkownika |
» 2015-07-02 14:33:45 Wydaje mi się że przy zmiennej bool = sukces1 // itp kolejne zmienne sukces zapamiętają stan sukces1 i też trzeba to czyścić. Ale nie potrafię rozgryźć jak. Czy muszę w tym poleceniu skorzystać z: std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' ); Czy też da się je rozwiązać inaczej ? |
|
Deivid Temat założony przez niniejszego użytkownika |
» 2015-07-02 14:54:04 OK, chyba sobie poradziłem. Kod programu wygląda tak: #include <iostream> using namespace std;;
int main() { cin.clear(); cin.sync(); float a, b, c; bool sukces1, sukces2, sukces3; cout << "Podaj 3 liczby rzeczywiste: a, b, c:" << endl; cout << "Podaj a: "; cin >> a; sukces1 = cin.good(); cin.clear(); cin.sync(); cout << "Podaj b: "; cin >> b; sukces2 = cin.good(); cin.clear(); cin.sync(); cout << "Podaj c: "; cin >> c; sukces3 = cin.good(); cin.clear(); cin.sync(); cout << "Liczba 'a' to: " << a << " Udalo sie wczytac? " << sukces1 << endl; cout << "Liczba 'b' to: " << b << " Udalo sie wczytac? " << sukces2 << endl; cout << "Liczba 'c' to: " << c << " Udalo sie wczytac? " << sukces3 << endl; return 0; }
Dodałem też komentarz, proszę o sprawdzenie czy dobrze zrozumiałem zadanie i ewentualne poprawki. PS. Czy da sie to samo zapisać w inny sposób (na moim poziomie ;) ) |
|
pekfos |
» 2015-07-02 16:05:22 Niepotrzebne cin.clear(); cin.sync(); na początku main().
|
|
Deivid Temat założony przez niniejszego użytkownika |
» 2015-07-03 15:01:20 Dzięki, nie zauważyłem :)
Wpadłem na pomysł że program można napisać "ładniej" tak aby po wczytaniu sprawdzał daną liczbę dopiero później prosił o wprowadzenie następnej. :)
Temat chyba już wyczerpany i do zamknięcia. |
|
« 1 » |