[C++] Poziom 1 rozdział 9. Obsługa strumienia wejściowego zadanie domowe.
Ostatnio zmodyfikowano 2016-08-24 18:07
h4rry Temat założony przez niniejszego użytkownika |
[C++] Poziom 1 rozdział 9. Obsługa strumienia wejściowego zadanie domowe. » 2016-08-24 14:27:05 Cześć! Dotarłem do rozdziału 9tego w poziomie pierwszym kursu bez większych problemów, jednak teraz natrafiłem na ścianę nie do przejścia z moją aktualną wiedzą i pojęciem o C++. Zadanie brzmi: 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. Wskazówka Informacje o poprawnym (albo niepoprawnym) wczytaniu danych należy przechować w dodatkowych zmiennych typu bool. mój kod #include <iostream> using namespace std; int main() { float a11, b11, c11; cout << "Podaj pierwsza liczbe rzeczywista: "; cin.clear(); cin >> a11; bool sukces1 = cin.good(); cout << endl; cout << "podaj druga liczbe rzeczywista: "; cin.clear(); cin >> b11; bool sukces2 = cin.good(); cout << endl; cout << "Podaj trzecia liczbe rzeczywista: "; cin.clear(); cin >> c11; bool sukces3 = cin.good(); cout << "Pierwsza liczba: " << a11 << ". Czy udalo sie wczytac? " << sukces1 << endl; cout << "Druga liczba: " << b11 << ". Czy udalo sie wczytac? " << sukces2 << endl; cout << "Trzecia liczba: " << c11 << ". Czy udalo sie wczytac? " << sukces3 << endl; return 0; }
Po wczytaniu drugiej liczby(takiej jaką proponował autor kursu tj. "nie 123") program nie daje możliwości wpisania trzeciej liczby. Podaj pierwsza liczbe rzeczywista: 13.3
podaj druga liczbe rzeczywista: nie 123
Podaj trzecia liczbe rzeczywista: Pierwsza liczba: 13.3. Czy udalo sie wczytac? 1 Druga liczba: 0. Czy udalo sie wczytac? 0 Trzecia liczba: 0. Czy udalo sie wczytac? 0
Process returned 0 (0x0) execution time : 10.086 s Press any key to continue. Zmieniałem cin.clear(); na cin.sync(); jednak efekt był taki: Podaj pierwsza liczbe rzeczywista: 13.3
podaj druga liczbe rzeczywista: nie 123
Podaj trzecia liczbe rzeczywista: Pierwsza liczba: 13.3. Czy udalo sie wczytac? 1 Druga liczba: 0. Czy udalo sie wczytac? 0 Trzecia liczba: 3.89517e+031. Czy udalo sie wczytac? 0
Process returned 0 (0x0) execution time : 4.950 s Press any key to continue. W czym tkwi problem? Liczę na pomoc :) |
|
carlosmay |
» 2016-08-24 17:07:53 Jeszcze cin.ignore() aby pozbyć się błędnych danych z bufora strumienia, ponieważ dane zostają w nim póki z nimi czegoś nie zrobimy (np. czyszczenie). |
|
h4rry Temat założony przez niniejszego użytkownika |
» 2016-08-24 18:07:45 okazało się, że muszę wklepać obie formułki tj. "cin.sync();" oraz "cin.clear();" i wtedy wszystko śmiga bez zarzutów. #include <iostream> #include <stdlib.h> using namespace std; int main() { float a11, b11, c11; cout << "Podaj pierwsza liczbe rzeczywista: "; cin.clear(); cin.sync(); cin >> a11;
jakby ktoś miał podobny problem zostawiam kawałek kodu :) |
|
« 1 » |