Namensräume
Varianten
Aktionen

std::basic_istream<CharT,Traits>::get

Von cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
int_type get();
(1)
basic_istream& get( char_type& ch );
(2)
basic_istream& get( char_type* s, std::streamsize count );
(3)
basic_istream& get( char_type* s, std::streamsize count, char_type delim );
(4)
basic_istream& get( basic_streambuf& strbuf );
(5)
basic_istream& get( basic_streambuf& strbuf, char_type delim );
(6)

Extrahiert Zeichen oder Zeichen aus dem Stream.

Alle Versionen verhalten sich wie UnformattedInputFunctions. Nach dem Erstellen und Überprüfen des Sentinels führen diese Funktionen Folgendes aus

1) Liest ein Zeichen und gibt es zurück, falls verfügbar. Andernfalls wird Traits::eof() zurückgegeben und failbit und eofbit gesetzt.
2) Liest ein Zeichen und speichert es in ch, falls verfügbar. Andernfalls bleibt ch unverändert und failbit und eofbit werden gesetzt. Beachten Sie, dass diese Funktion im Gegensatz zum formatierten Zeicheneingabeoperator >> nicht für die Typen signed char und unsigned char überladen ist.
3) Entspricht get(s, count, widen('\n')), d. h., es werden höchstens std::max(0, count - 1) Zeichen gelesen und in die Zeichenkette gespeichert, auf die von s gezeigt wird, bis '\n' gefunden wird.
4) Liest Zeichen und speichert sie an aufeinanderfolgenden Positionen im Zeichenarray, dessen erstes Element von s gezeigt wird. Zeichen werden extrahiert und gespeichert, bis eine der folgenden Bedingungen eintritt:
  • count ist kleiner als 1 oder es wurden count - 1 Zeichen gespeichert.
  • Ende der Datei im Eingabesequenz tritt auf (setstate(eofbit) wird aufgerufen).
  • Das nächste verfügbare Eingabezeichen c ist gleich delim, wie von Traits::eq(c, delim) bestimmt. Dieses Zeichen wird nicht extrahiert (im Gegensatz zu getline()).
In jedem Fall, wenn count > 0 ist, wird ein Nullzeichen (CharT()) an der nächsten freien Position des Arrays gespeichert.
5) Entspricht get(strbuf, widen('\n')), d. h., es werden verfügbare Zeichen gelesen und in das angegebene basic_streambuf-Objekt eingefügt, bis '\n' gefunden wird.
6) Liest Zeichen und fügt sie in die Ausgabesequenz ein, die vom angegebenen basic_streambuf-Objekt gesteuert wird. Zeichen werden extrahiert und in strbuf eingefügt, bis eine der folgenden Bedingungen eintritt:
  • Ende der Datei in der Eingabesequenz.
  • Das Einfügen in die Ausgabesequenz schlägt fehl (in diesem Fall wird das Zeichen, das nicht eingefügt werden konnte, nicht extrahiert).
  • Das nächste verfügbare Eingabezeichen c ist gleich delim, wie von Traits::eq(c, delim) bestimmt. Dieses Zeichen wird nicht extrahiert.
  • Eine Ausnahme tritt auf (in diesem Fall wird die Ausnahme abgefangen und nicht erneut ausgelöst).

Wenn keine Zeichen extrahiert wurden, wird setstate(failbit) aufgerufen.

Alle Versionen setzen den Wert von gcount() auf die Anzahl der extrahierten Zeichen.

Inhalt

[bearbeiten] Parameter

ch - Referenz auf das Zeichen, in das das Ergebnis geschrieben werden soll
s - Zeiger auf die Zeichenkette, in die die Zeichen gespeichert werden sollen
zählt - Größe der Zeichenkette, auf die von s gezeigt wird
delim - Trennzeichen, an dem die Extraktion gestoppt werden soll. Es wird nicht extrahiert und nicht gespeichert
strbuf - Stream-Puffer, in den der Inhalt gelesen werden soll

[bearbeiten] Rückgabewert

1) Das extrahierte Zeichen oder Traits::eof().
2-6) *this

[bearbeiten] Ausnahmen

failure, wenn ein Fehler aufgetreten ist (der Fehlerstatus-Flag ist nicht goodbit) und exceptions() für diesen Zustand zum Werfen gesetzt ist.

Wenn eine interne Operation eine Ausnahme auslöst, wird diese abgefangen und badbit gesetzt. Wenn exceptions() für badbit gesetzt ist, wird die Ausnahme erneut ausgelöst.

[bearbeiten] Beispiel

#include <iostream>
#include <sstream>
 
int main()
{
    std::istringstream s1("Hello, world.");
    char c1 = s1.get(); // reads 'H'
    std::cout << "after reading " << c1 << ", gcount() == " <<  s1.gcount() << '\n';
 
    char c2;
    s1.get(c2);         // reads 'e'
    char str[5];
    s1.get(str, 5);     // reads "llo,"
    std::cout << "after reading " << str << ", gcount() == " <<  s1.gcount() << '\n';
 
    std::cout << c1 << c2 << str;
    s1.get(*std::cout.rdbuf()); // reads the rest, not including '\n'
    std::cout << "\nAfter the last get(), gcount() == " << s1.gcount() << '\n';
}

Ausgabe

after reading H, gcount() == 1
after reading llo,, gcount() == 4
Hello, world.
After the last get(), gcount() == 7

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 370 C++98 Die Auswirkung von Überladung (5) war get(s, count, widen('\n')),
was die Auswirkung von Überladung (3) ist
korrigiert zu
get(strbuf, widen('\n'))
LWG 531 C++98 Die Überladungen (3,4) konnten den
Fall, dass count nicht positiv ist, nicht behandeln
Es wird kein Zeichen
in diesem Fall extrahiert

[bearbeiten] Siehe auch

extrahiert Zeichenblöcke
(public member function) [bearbeiten]
extrahiert formatierte Daten
(public member function) [bearbeiten]
extrahiert Zeichen und Zeichen-Arrays
(function template) [bearbeiten]