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

białe znaki w strumieniu std::cin>>

Ostatnio zmodyfikowano 2016-09-10 16:07
Autor Wiadomość
Kuba1606
Temat założony przez niniejszego użytkownika
białe znaki w strumieniu std::cin>>
» 2016-09-10 10:58:50
Witam!
Przechodzę właśnie kurs programowania w C++, napotkałem jednak pewien problem :/
"Gdy używamy strumienia std::cin>> białe znaki są pomijane. Tak więc gdyby w buforze strumienia nie znajdował się przecinek, tylko biały znak - strumień by go po prostu pominął i przeszedł do kolejnego znaku. W konsekwencji druga operacja wczytywania liczby powiodłaby się, a w strumieniu pozostałyby dane:"
Napisany przeze mnie program to:
#include <iostream>
int main()
{
    int liczba
    std::cin >> liczba;
    std:: cout << "liczba" << liczba << std::endl;
    return 0;
}
Wciskam F9, wpisuję "12345 321. czy 2+2 wynosi 4?" i niestety nadal w buforze strumienia zostaje " 321. czy 2+2 wynosi 4?"
Bufor nadal zatrzymuje się na białym znaku, stąd pytanie jaki jest tego powód?
P-151623
kistel66
» 2016-09-10 11:12:36
A dlaczego chcesz do liczby (int) zapisywać spacje itp.?
Do tekstów służy string.
P-151625
Kuba1606
Temat założony przez niniejszego użytkownika
» 2016-09-10 12:00:03
Niestety w tym kursie nie została opisana funkcja "string", a ja jej nie znam, wątpię żeby wykonanie tego polecenia wymagało użycia funkcji, która nie została opisana i której nie umiem użyć... Jak więc mam to zrobić?
P-151628
carlosmay
» 2016-09-10 13:47:43
P-151634
marcolo2307
» 2016-09-10 14:57:38
Użyj
std::getline( std::cin, std::string );
. Powinno to być opisane gdzieś w dalszej części kursu.
P-151637
carlosmay
» 2016-09-10 16:07:54
Bufor nadal zatrzymuje się na białym znaku, stąd pytanie jaki jest tego powód?
Bo operator
>>
 oczekuje danych zgodnych z typem zmiennej, do której będzie wczytywał dane (tutaj
int
.
Ten operator pomija poprzedzające białe znaki (odrzuca).

Wczytuje do zmiennej 12345 i w buforze strumienia pozostają " 321. czy 2+2 wynosi 4?" - ze spacją na początku.
To co zostało można dalej pobierać, bądź wyczyścić. np:
C/C++
{
    int a;
    int b;
    char ch;
    cin >> a >> ch >> b; // wpisujesz 1 + 2
    cout << a << ' ' << ch << ' ' << b << '\n'; // wypisze "1 + 2"
}
P-151645
« 1 »
  Strona 1 z 1