Alipeteros Temat założony przez niniejszego użytkownika |
Opis działania strumienia wejściowego - wprowadzanie danych do strumienia » 2015-12-16 17:33:36 Witam ponownie. Mam problem z działem kursu dotyczącego obsługi strumienia wejściowego a dokładnie z miejscem: "Opis działania strumienia wejściowego".Chodzi o czynności napisane dużymi literami:
"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?"
Gdzie mam wysłać żądanie w programie i gdzie mam wprowadzić nowe dane "12345, 321. Czy 2+2 wynosi 4"?
|
|
carlosmay |
» 2015-12-16 17:42:44 12345, 321. Czy 2+2 wynosi 4 trzeba wczytać z klawiatury, czyli piszesz wszystko jak widać i zatwierdzasz enterem. Dalej w lekcji opisane jest działanie oparatora >> i jak działa na takie dane wejściowe. |
|
Alipeteros Temat założony przez niniejszego użytkownika |
» 2015-12-16 17:47:17 tylko że dalej w kursie pisze: "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?" Te dane wcale mi się tak nie wyświetlają dlatego też się pytam czy nie walnąłem się gdzieś w poleceniach wspomnianych wcześniej |
|
carlosmay |
» 2015-12-16 18:00:50 Nie walnąłeś się. Całość trafia do bufora strumienia wejściowego. Zmienna typu int przyjmuje tylko liczby całkowite, więc wczytywanie do takiej zmiennej kończy się przy próbie wczytania znaku przecinka, a reszta zostaje w buforze (, 321. Czy 2+2 wynosi 4). Teraz możesz dalej wczytywać pozostałe dane z bufora. Następny znak jest typu char więc można go pobrać do zmiennej 'char' Natomiast próba wczytania jakiegoś typu liczbowego zamiast znakowego zaskutkuje błędem wczytywania (z którym będzie trzeba sobie poradzić). Lekcja ma na celu uzmysłowić co może zostać w buforze po wczytaniu danych do zmiennej. |
|
Alipeteros Temat założony przez niniejszego użytkownika |
» 2015-12-16 19:10:19 Mam jeszcze tylko pyatnie albo prośbę o sprawdzenie programu który napisałem do zadania domowego w tym temacie czy jest poprawne?
#include <iostream> #include <limits> int main() { int a; int b; int c;
std::cout << "Liczba pierwsza to: "; std::cin >> a; std::cout << "Wczytano? " << std::cin.good() << std::endl; bool aCzySukces = std::cin.good(); std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
std::cout << "Liczba druga to: "; std::cin >> b; std::cout << "Wczytano? " << std::cin.good() << std::endl; bool bCzySukces = std::cin.good(); std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
std::cout << "Liczba trzecia to: "; std::cin >> c; std::cout << "Wczytano? " << std::cin.good() << std::endl; bool cCzySukces = std::cin.good(); std::cin.clear(); std::cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
std::cout << "Liczba a = " << a << std::endl; std::cout << "Liczba b = " << b << std::endl; std::cout << "Liczba c = " << c << std::endl; return 0; }
|
|
carlosmay |
» 2015-12-16 19:19:17 bool aCzySukces = std::cin.good(); Zapisujesz stan strumienia w zmiennej 'aCzySukces' ale nigdzie jej nie używasz. |
|
Alipeteros Temat założony przez niniejszego użytkownika |
» 2015-12-16 19:26:50 Czyli że co? Bo nie ogarniam tego |
|
carlosmay |
» 2015-12-16 19:34:05 Czyli że co? Bo nie ogarniam tego |
Tworzysz zmienną 'aCzySukces', 'bCzySukces', 'cCzySukces'. Zapisujesz stan strumienia po wczytaniu danych, czyli wartość 'true' lub 'false', którą zwraca std::cin . I to wszystko. Nigdzie nie używasz tych zmiennych. Analogicznie: int a, b, c; std::cin >> a >> b >> c; return 0;
|
|
« 1 » 2 |