[Lekcja 9] Obsługa strumienia wejściowego - zadanie
Ostatnio zmodyfikowano 2012-10-01 20:51
krysteksulek Temat założony przez niniejszego użytkownika |
[Lekcja 9] Obsługa strumienia wejściowego - zadanie » 2012-09-30 22:41:07 Witam, oto treść zadania: 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 liczba to: 0. Wczytano? 0. Liczba trzecie liczba to: 33.22. Wczytano? 1. Wskazówka Informacje o poprawnym (albo niepoprawnym) wczytaniu danych należy przechować w dodatkowych zmiennych typu bool. Mam z nim mały problem. Mianowicie chodzi o informację czy poprawnie wczytano. Występuje on przy większej ilości danych. Przy tym wczytywanie dziala poprawnie [rozumiem że gdy robie czyszczenie to zmienna bool musi być za nim] #include <iostream> int main() { float a; float b; float c; std::cout << "Podaj liczbe rzeczywista 1: "; std::cin.clear(); std::cin.sync(); std::cin >> a; bool sukces = std::cin.good(); std::cout << "Liczba a = " << a; std::cout << ". Wczytano? " << sukces; std::cout << std::endl; return 0; }
Tutaj juz jest problem:
#include <iostream> int main() { float a; float b; float c; std::cout << "Podaj liczbe rzeczywista 1: "; std::cin >> a; std::cin.clear(); std::cin.sync(); std::cout << "Podaj liczbe rzeczywista 2: "; std::cin >> b; std::cin.clear(); std::cin.sync(); std::cout << "Podaj liczbe rzeczywista 3: "; std::cin >> c; std::cin.clear(); std::cin.sync(); std::cout << std::endl; bool sukces = std::cin.good(); std::cout << "Liczba a = " << a; std::cout << ". Wczytano? " << sukces; std::cout << std::endl; std::cout << "Liczba b = " << b; std::cout << ". Wczytano? " << sukces; std::cout << std::endl; std::cout << "Liczba c = " << c; std::cout << ". Wczytano? " << sukces; return 0; } Próbowałem również tak: #include <iostream> int main() { float a; float b; float c; std::cout << "Podaj liczbe rzeczywista 1: "; std::cin.clear(); std::cin.sync(); std::cin >> a; std::cout << "Podaj liczbe rzeczywista 2: "; std::cin.clear(); std::cin.sync(); std::cin >> b; std::cout << "Podaj liczbe rzeczywista 3: "; std::cin.clear(); std::cin.sync(); std::cin >> c; std::cout << std::endl; bool sukces = std::cin.good(); std::cout << "Liczba a = " << a; std::cout << ". Wczytano? " << sukces; std::cout << std::endl; std::cout << "Liczba b = " << b; std::cout << ". Wczytano? " << sukces; std::cout << std::endl; std::cout << "Liczba c = " << c; std::cout << ". Wczytano? " << sukces; return 0; } Proszę o pomoc i wytłumaczenie :) |
|
jsc |
» 2012-09-30 22:56:56 Najpierw się sprawdza czy wczytano, a dopiero później się czyści, a ja widzę że robisz na odwrót. |
|
krysteksulek Temat założony przez niniejszego użytkownika |
» 2012-09-30 23:54:39 Hmm, w takim razie jak to powinno być? |
|
DejaVu |
» 2012-10-01 02:05:23 Przecież napisał Ci jak powinno być... |
|
krysteksulek Temat założony przez niniejszego użytkownika |
» 2012-10-01 14:56:53 No tak, tylko że nie do końca zrozumiałem. Tak nie działa: #include <iostream> int main() { float a; float b; float c; std::cout << "Podaj liczbe rzeczywista 1: "; std::cin >> a; std::cout << "Podaj liczbe rzeczywista 2: "; std::cin >> b; std::cout << "Podaj liczbe rzeczywista 3: "; std::cin >> c; std::cout << std::endl; bool sukces = std::cin.good(); std::cout << "Liczba a = " << a; std::cout << ". Wczytano? " << sukces; std::cin.clear(); std::cin.sync(); std::cout << std::endl; std::cout << "Liczba b = " << b; std::cout << ". Wczytano? " << sukces; std::cin.clear(); std::cin.sync(); std::cout << std::endl; std::cout << "Liczba c = " << c; std::cout << ". Wczytano? " << sukces; std::cin.clear(); std::cin.sync(); return 0; }
Tak też nie: #include <iostream> int main() { float a; float b; float c; std::cout << "Podaj liczbe rzeczywista 1: "; std::cin >> a; std::cin.clear(); std::cin.sync(); std::cout << "Podaj liczbe rzeczywista 2: "; std::cin >> b; std::cin.clear(); std::cin.sync(); std::cout << "Podaj liczbe rzeczywista 3: "; std::cin >> c; std::cin.clear(); std::cin.sync(); std::cout << std::endl; bool sukces = std::cin.good(); std::cout << "Liczba a = " << a; std::cout << ". Wczytano? " << sukces; std::cout << std::endl; std::cout << "Liczba b = " << b; std::cout << ". Wczytano? " << sukces; std::cout << std::endl; std::cout << "Liczba c = " << c; std::cout << ". Wczytano? " << sukces; return 0; }
|
|
SeaMonster131 |
» 2012-10-01 15:23:21 Wczytujesz liczbę a, przypisujesz wartość cin.good() do zmiennej np sukcesA, czyścisz strumień. Wczytujesz liczbę b, przypisujesz wartość cin.good() do zmiennej np sukcesB, czyścisz strumień, itd... |
|
DejaVu |
» 2012-10-01 16:40:38 Jedna zmienna 'bool' nie pomieści trzech informacji. Jedna informacja = jedna zmienna. Trzy informacje = trzy zmienne. |
|
krysteksulek Temat założony przez niniejszego użytkownika |
» 2012-10-01 19:35:25 Dzięki, zadziałało. Mam nadzieję, że zapis jest poprawny [a nie np "fuks"]:
#include <iostream> int main() { float a; float b; float c; std::cout << "Podaj liczbe rzeczywista 1: "; std::cin >> a; bool sukcesA = std::cin.good(); std::cin.clear(); std::cin.sync(); std::cout << "Podaj liczbe rzeczywista 2: "; std::cin >> b; bool sukcesB = std::cin.good(); std::cin.clear(); std::cin.sync(); std::cout << "Podaj liczbe rzeczywista 3: "; std::cin >> c; bool sukcesC = std::cin.good(); std::cin.clear(); std::cin.sync(); std::cout << std::endl; std::cout << "Liczba a = " << a; std::cout << ". Wczytano? " << sukcesA; std::cout << std::endl; std::cout << "Liczba b = " << b; std::cout << ". Wczytano? " << sukcesB; std::cout << std::endl; std::cout << "Liczba c = " << c; std::cout << ". Wczytano? " << sukcesC; return 0; }
|
|
« 1 » 2 |