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

Problem ze strumieniem wejściowym

Ostatnio zmodyfikowano 2013-07-25 14:15
Autor Wiadomość
evanges
Temat założony przez niniejszego użytkownika
» 2013-07-24 15:21:55
Nie wiem jak to zrobić. Jest to tam wytłumaczone w sposób niezrozumiały dla mnie, dlatego chcę żeby ktoś mi tu wkleił kod. Tylko tyle...
P-88669
pekfos
» 2013-07-24 16:33:05
Czego dokładnie nie rozumiesz?
P-88673
evanges
Temat założony przez niniejszego użytkownika
» 2013-07-24 19:49:38
Konkretnie to nie rozumiem jak wprowadzić dane do strumienia, żeby uzyskać taki efekt: "12345, 321. Czy 2+2 wynosi 4?" Ponad to nie wiem jak to jest z tym buforem strum. wejściowego.
Mój problem jest w lekcji nr 9 poz. kursu 1. Byłbym wdzięczny za napisanie kompletnego kodu zdolnego do kompilacji i wyjaśnienie czegokolwiek o tym buforze ;)
P-88697
pekfos
» 2013-07-24 19:54:24
Użytkownik programu wprowadza dane do strumienia, które potem odczytujesz w programie. Gdy program się zatrzyma na wczytywaniu danych od użytkownika i użytkownik poda te "12345, 321..", to trafi to do bufora strumienia. Potem gdy odczytujesz int, to wczytasz z bufora "12345" do jakiejś zmiennej, a w buforze zostanie cała reszta (", 321.."), którą też możesz odczytać.
P-88698
Rafals
» 2013-07-24 20:21:06
Właśnie się pociłem przez 20 minut, aby to wytłumaczyć, a tu nagle po akceptacji post nie wskoczył...
Tak jak Pekfos napisał. Do jakiejś zmiennej typu int wczytasz '12345', następny jest przecinek i właśnie tu przerwie wczytywanie, bo przecinek jest typu char.
Popróbuj np na takim kodzie:
C/C++
#include <iostream>

int main()
{
    int a, b;
    std::cout << "podaj cos: ";
    std::cin >> a;
    std::cin >> b;
    std::cout << a << std::endl;
    std::cout << b;
}
Najpierw wprowadź coś podobnego do przykładu, np: "12, 32". Do a przypisze 12, a do b nic bo spotkał przecinek, który jest typem char, z kolei b jest typem int.
Drugie wprowadzenie zrób "12 32". Do a przypisze 12, do b przypisze 32. Dlatego że pomija spację będącą białym znakiem.

Tu drugi przykład, z tym że pamiętaj iż typ char to może być wszystko, od cyfry po literę, poprzez znaki specjalne.
C/C++
#include <iostream>

int main()
{
    int a, c;
    char b;
    std::cout << "podaj cos: ";
    std::cin >> a;
    std::cin >> b;
    std::cin >> c;
    std::cout << a << std::endl;
    std::cout << b << std::endl;
    std::cout << c;
}
Pierwsze wprowadzenie: "12,32"
Drugie wprowadzenie: "12 32"



Wprowadzanie bez czyszczenia strumienia można wykorzystać np w ten sposób:
C/C++
#include <iostream>
using namespace std;

int main()
{
    int dzien, miesiac, rok;
    cout << "Podaj date urodzenia w formacie 'dd mm rrrr':" << endl;
    cin >> dzien;
    cin >> miesiac;
    cin >> rok;
    cout << "Twoja data urodzenia to:" << endl;
    cout << dzien << ":" << miesiac << ":" << rok;
}
Zamiast pytać osobno o dzień, miesiąc i rok. Aczkolwiek niesie to za sobą ryzyko, że zostanie wprowadzone coś innego i wtedy wyświetlą się błędne dane. Brak czyszczenia strumienia można użyć o ile wiesz, że będzie wczytane to co powinno.
P-88699
pekfos
» 2013-07-24 20:37:27
C/C++
#include <iostream>
using namespace std;

int main()
{
    int x;
    cin >> x; //wczytaj inta
    cin.clear(); //wyczyść błędy
   
    char tab[ 64 ];
    cin.getline( tab, 64 ); //wczytaj resztę linii (do 63 znaków)
    cout << tab;
}
P-88701
evanges
Temat założony przez niniejszego użytkownika
» 2013-07-25 11:52:49
Dzięki za pomoc. Już wiem o co chodzi, tylko dziwie się, że to działa bez : return 0;   
P-88734
pekfos
» 2013-07-25 14:15:02
Funkcja main() to wyjątek. Zwraca 0, jeśli oczywiście nie zostało jawnie zwrócone co innego ;) We wszystkich innych funkcjach zwracających wartości, wyjście bez określenia zwracanej wartości to UB.
P-88748
1 « 2 »
Poprzednia strona Strona 2 z 2