LEGOlas0232 Temat założony przez niniejszego użytkownika |
Poziom 1 Rozdział 9 » 2015-08-02 22:39:45 Jak dotąd przechodziłem z łatwością przez poprzednie rozdziały, ale tutaj się trochę pogubiłem. Chodzi mi o podrozdział "Opis działania strumienia wyjściowego:
"Skoro nauczyliśmy się już korzystać ze strumienia wejściowego w podstawowym wymiarze - przyjrzyjmy się teraz jego działaniu. Wyobraźmy więc sobie, że początkowo strumień jest pusty. Wysyłamy następnie żądanie: "daj mi liczbę całkowitą" (czyli: std::cin>>liczba). Strumień jest pusty, więc nie można z niego pobrać danych, a więc użytkownik musi wprowadzić nowe dane do strumienia. Wprowadźmy teraz do strumienia następujące dane:
12345, 321. Czy 2+2 wynosi 4?
Po wciśnięciu klawisza ENTER dane te trafiają do bufora strumienia wejściowego, z którego następnie odczytywane są dane. Po wczytaniu liczby w buforze strumienia wejściowego zostaną następujące dane:
, 321. Czy 2+2 wynosi 4?
Co się teraz stanie, gdy zechcemy wczytać kolejną liczbę? Strumień stwierdzi, że pierwszym znakiem w strumieniu jest znak ,, który nie jest liczbą, a więc nie zostanie wczytana liczba. Operacja wczytywania się nie powiedzie, a flaga błędu zostanie ustawiona."
Moje podstawowe pytanie: jak sprawić by strumień był pusty??? Czy ktoś mógłby mi pokazać pełny kod do tego fragmentu? |
|
pekfos |
» 2015-08-02 22:42:18 jak sprawić by strumień był pusty??? |
Na początku programu możesz założyć, że jest pusty. W pozostałych przypadkach, w kursie masz opisane czyszczenie strumienia - zarówno flag, jak i zawartości. To drugie nawet w dwóch wariantach. |
|
LEGOlas0232 Temat założony przez niniejszego użytkownika |
» 2015-08-02 22:53:49 Ale jak to zrobić? Czego nie wpisywać? Jak mam założyć, że jest pusty? |
|
carlosmay |
» 2015-08-02 23:15:14 cin >> zmienna;
cin.clear(); cin.sync();
Troche obrazkowo, ale mam nadzieję zrozumiale. Edit: najlepiej nie zakładać że jest czysty tylko czyścić go gdy jest taki potrzebny. |
|
LEGOlas0232 Temat założony przez niniejszego użytkownika |
» 2015-08-03 10:07:46 Dzięki. A czy mógłbyś mi też pokazać program do tego fragmentu kursu?
EDIT: Zrobiłem tak, ale chyba nie o to chodzi:
#include <iostream> #include <cstdio> using namespace std; int main() { float a; long b; cout <<"Podaj liczbe calkowita (nie wieksza niz 4 200 000 000) : "; cin >> a; cin.clear(); cin.sync();
cout <<"Podaj liczbe rzeczywista: "; cin >> b; cin.clear(); cin.sync();
cout <<"\nLiczba a = " << a << endl; cout <<"\nLiczba b = " << b << endl; return 0; }
|
|
carlosmay |
» 2015-08-03 10:38:29 Zakładanie tematów: Kolorowanie składni. Na logikę: czyść przed użyciem zmiennej. Nawet jak wyczyścisz pusty strumień nic mu się nie stanie. |
|
C-Objective |
» 2015-08-05 10:04:46 Odwalę troche pracy za ciebię: #include <iostream> #include <cstdlib> using namespace std; int main() { float a; long b; cout << "Podaj liczbe calkowita (nie wieksza niz 4 200 000 000) : "; cin >> a; cin.clear(); cin.sync(); cout << "Podaj liczbe rzeczywista: "; cin >> b; cin.clear(); cin.sync(); cout << endl; cout << "Liczba a = " << a << endl; cout << "Liczba b = " << b << endl; return EXIT_SUCCESS; }
Wystarczyła drobna korekta, a żeby uczynić program przenośnym na innych platformach (wątpię że chcesz to zrobić) można zamienić cout na printf . |
|
Szymon2727 |
» 2015-08-05 13:32:43 Objecitve nie mąć mu w głowie, zapomniałeś napisać że taki printf jest bardziej podatny na błędy i ma np. %d. Przestań już z tym promowaniem czystego C, bo nic dobrego z tego nie wyjdzie.
Co do tematu to po prostu przeczytaj ten kurs do końca, std::cin.clear() i std::cin.sync() to wszystko czego potrzebujesz do czystego strumienia. |
|
« 1 » |