Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Opis działania strumienia wejściowego - wprowadzanie danych do strumienia

Ostatnio zmodyfikowano 2015-12-17 23:46
Autor Wiadomość
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"?
P-142047
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.
P-142048
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
P-142049
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'
C/C++
char ch;
cin >> ch;
 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.
P-142052
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;
}
P-142057
carlosmay
» 2015-12-16 19:19:17
bool aCzySukces = std::cin.good();
 Zapisujesz stan strumienia w zmiennej 'aCzySukces' ale nigdzie jej nie używasz.
P-142058
Alipeteros
Temat założony przez niniejszego użytkownika
» 2015-12-16 19:26:50
Czyli że co? Bo nie ogarniam tego
P-142060
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:
C/C++
int a, b, c; // deklarujesz zmienne
std::cin >> a >> b >> c; // wypelniasz zmienne
return 0; // koniec programu, jaki byl sens ich deklaracji i wypelniania?
 
P-142061
« 1 » 2
  Strona 1 z 2 Następna strona