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

Jak zabezpieczyć stringa w przypadku wprowadzenia więcej niż jednego wyrazu.

Ostatnio zmodyfikowano 2017-10-09 20:46
Autor Wiadomość
Qabrix
Temat założony przez niniejszego użytkownika
Jak zabezpieczyć stringa w przypadku wprowadzenia więcej niż jednego wyrazu.
» 2017-10-09 19:57:29
Witam,
mam pytanie, w jaki sposób chcąc, aby nasz program wczytywał tylko jeden wyraz do stringa, zabezpieczyć go przed wpisaniem przez użytkownika ich paru w jednej linii.
Chciałbym, aby program zwrócił uwagę użytkownikowi, jeżeli wpisze do strumienia więcej niż jeden wyraz.

Z góry dziękuję za pomoc.
P-165584
YooSy
» 2017-10-09 20:05:22
Ponieraj dane operatorem >>, a po pobraniu sprawdzaj czy w buforze strumienia jest coś innego niż znak końca linii.
P-165585
Qabrix
Temat założony przez niniejszego użytkownika
» 2017-10-09 20:09:33
Ok, dzięki, a mógłbyś może pokazać sposób sprawdzania czy w czy buforze strumienia jest znak końca linii? Byłbym bardzo wdzięczny.
P-165586
YooSy
» 2017-10-09 20:21:02
Napisz, jaki masz cel takiego sprawdzania.
Wygląda to na problem XY.
P-165589
Qabrix
Temat założony przez niniejszego użytkownika
» 2017-10-09 20:42:28
C/C++
getline( cin, wyraz );

while( true )
{
    if( wyraz.find( " " ) != string::npos )
    {
        cout << "Wprowadź jeden wyraz!" << endl;
        getline( cin, wyraz );
    }
    else
         break;
   
}

chciałbym aby ten fragment zrealizować za pomocą sprawdzania bufora strumienia.
P-165590
YooSy
» 2017-10-09 20:46:26
Jaki jest cel tego działania?
Przecież wystarczy odrzucić nadmiar danych po wczytaniu i tyle. Dwie linie.

Jeśli nadal chcesz zachować swoją funkcjonalność spróbuj:
C/C++
string s;
while( getline( cin, s ) ) {
    if( s.find( ' ' ) == string::npos ) break;
   
}

albo tak ze sprawdzeniem długości bufora:
C/C++
streamsize check_buffer_size( istream & is )
{
    streambuf * buffer_ptr = is.rdbuf();
    return buffer_ptr->in_avail();
}

int main()
{
    string s;
    cin >> s;
   
    if( check_buffer_size( cin ) <= 1 ) { // pamiętaj, że w buforze jest jeden znak '\n'
        cout << "is empty.\n";
    }
    else {
        cout << "is not empty.\n";
    }
}
P-165591
« 1 »
  Strona 1 z 1