Jak zabezpieczyć stringa w przypadku wprowadzenia więcej niż jednego wyrazu.
Ostatnio zmodyfikowano 2017-10-09 20:46
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. |
|
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. |
|
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. |
|
YooSy |
» 2017-10-09 20:21:02 Napisz, jaki masz cel takiego sprawdzania. Wygląda to na problem XY. |
|
Qabrix Temat założony przez niniejszego użytkownika |
» 2017-10-09 20:42:28 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. |
|
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: string s; while( getline( cin, s ) ) { if( s.find( ' ' ) == string::npos ) break; }
albo tak ze sprawdzeniem długości bufora: 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 ) { cout << "is empty.\n"; } else { cout << "is not empty.\n"; } }
|
|
« 1 » |