Sdílet prostřednictvím


basic_istream Třída

Popisuje objekt, který řídí extrakci prvků a kódované objekty z vyrovnávací paměti datového proudu s prvky typu Char_T, také známý jako char_type, jehož znak vlastnosti jsou určeny třídou Tr, také známé jako traits_type.

Syntaxe

template <class Char_T, class Tr = char_traits<Char_T>>
class basic_istream : virtual public basic_ios<Char_T, Tr>

Poznámky

Většina členských funkcí, které přetíží operator>> , jsou formátované vstupní funkce. Řídí se vzorem:

iostate state = goodbit;
const sentry ok(*this);

if (ok)
{
    try
    {
        /*extract elements and convert
            accumulate flags in state.
            store a successful conversion*/
    }
    catch (...)
    {
        try
        {
            setstate(badbit);

        }
        catch (...)
        {
        }
        if ((exceptions()& badbit) != 0)
            throw;
    }
}
setstate(state);

return (*this);

Mnoho dalších členských funkcí je neformátovaných vstupních funkcí. Řídí se vzorem:

iostate state = goodbit;
count = 0;    // the value returned by gcount
const sentry ok(*this, true);

if (ok)
{
    try
    {
        /* extract elements and deliver
            count extracted elements in count
            accumulate flags in state */
    }
    catch (...)
    {
        try
        {
            setstate(badbit);

        }
        catch (...)
        {
        }
        if ((exceptions()& badbit) != 0)
            throw;
    }
}
setstate(state);

Obě skupiny funkcí volají setstate(eofbit) , pokud při extrahování prvků narazí na konec souboru. Další informace najdete na webu setstate.

Objekt úložišť tříd basic_istream<Char_T, Tr> :

  • Virtuální veřejný základní objekt třídy basic_ios<Char_T, Tr>. Další informace najdete na webu basic_ios.

  • Počet extrakce poslední neformátované vstupní operace (volaný count v předchozím kódu).

Příklad

Další informace o vstupních datových proudech najdete v příkladu třídybasic_ifstream.

Konstruktory

Konstruktor Popis
basic_istream Vytvoří objekt typu basic_istream.

Členské funkce

Členová funkce Popis
gcount Vrátí počet znaků přečtených během posledního neformátovaného vstupu.
get Přečte jeden nebo více znaků ze vstupního datového proudu.
getline Načte řádek ze vstupního datového proudu.
ignore Způsobí vynechání několika prvků z aktuální pozice čtení.
peek Vrátí další znak, který se má přečíst.
putback Vloží zadaný znak do datového proudu.
read Přečte zadaný počet znaků z datového proudu a uloží je do pole.
readsome Čtení pouze z vyrovnávací paměti.
seekg Přesune pozici čtení v datovém proudu.
sentry Vnořená třída popisuje objekt, jehož deklarace strukturuje formátované vstupní funkce a neformátované vstupní funkce.
swap Vymění tento basic_istream objekt pro zadaný basic_istream parametr objektu.
sync Synchronizuje přidružené vstupní zařízení datového proudu s vyrovnávací pamětí datového proudu.
tellg Zaznamenává aktuální pozici čtení v datovém proudu.
unget Vloží poslední přečtený znak zpět do datového proudu.

Operátory

Operátor Popis
operator>> Volá funkci vstupního datového proudu nebo čte formátovaná data ze vstupního datového proudu.
operator= basic_istream Přiřadí tento objekt na pravé straně operátoru. Jedná se o přiřazení přesunutí zahrnující rvalue odkaz, který nenechá kopii za sebou.

Požadavky

Záhlaví: <istream>

Obor názvů: std

basic_istream::basic_istream

Vytvoří objekt typu basic_istream.

explicit basic_istream(
    basic_streambuf<Char_T, Tr>* strbuf,
    bool _Isstd = false);

basic_istream(basic_istream&& right);

Parametry

strbuf
Objekt typu basic_streambuf.

_Isstd
truepokud se jedná o standardní datový proud; v opačném případě . false

right
Objekt basic_istream , který chcete zkopírovat.

Poznámky

První konstruktor inicializuje základní třídu voláním init(strbuf). Ukládá také nulu v počtu extrakce. Další informace najdete na webu init. Další informace o tomto počtu extrakcí najdete v části Poznámky v přehledu basic_istream třídy .

Druhý konstruktor inicializuje základní třídu voláním move(right). Také ukládá right.gcount() do počtu extrakce a ukládá nula v počtu extrakce pro right.

Příklad

Další informace o vstupních datových proudech najdete v příkladu basic_ifstream::basic_ifstream .

basic_istream::gcount

Vrátí počet znaků přečtených během posledního neformátovaného vstupu.

streamsize gcount() const;

Návratová hodnota

Počet extrakcí.

Poznámky

Slouží basic_istream::get ke čtení neformátovaných znaků.

Příklad

// basic_istream_gcount.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   cout << "Type the letter 'a': ";

   ws( cin );
   char c[10];

   cin.get( &c[0],9 );
   cout << c << endl;

   cout << cin.gcount( ) << endl;
}
a
Type the letter 'a': a
1

basic_istream::get

Přečte jeden nebo více znaků ze vstupního datového proudu.

int_type get();

basic_istream<Char_T, Tr>& get(Char_T& Ch);
basic_istream<Char_T, Tr>& get(Char_T* str, streamsize count);
basic_istream<Char_T, Tr>& get(Char_T* str, streamsize count, Char_T delimiter);

basic_istream<Char_T, Tr>& get(basic_streambuf<Char_T, Tr>& strbuf);
basic_istream<Char_T, Tr>& get(basic_streambuf<Char_T, Tr>& strbuf, Char_T delimiter);

Parametry

count
Počet znaků, ze strbufkteré se má číst .

delimiter
Znak, který by měl ukončit čtení, pokud je zjištěn před count.

str
Řetězec, ve kterém se má psát.

Ch
Znak, který chcete získat.

strbuf
Vyrovnávací paměť, do které se má zapisovat.

Návratová hodnota

Bez parametrů get vrátí prvek přečtený jako celé číslo nebo konec souboru. Zbývající formuláře vrátí datový proud (*this).

Poznámky

První neformátovaná vstupní funkce extrahuje prvek, pokud je to možné, například vrácením rdbuf->sbumpc. V opačném případě se vrátí traits_type::eof. Pokud funkce extrahuje žádný prvek, volá setstate(failbit). Další informace najdete na webu setstate.

Druhá funkce extrahuje int_type prvek meta stejným způsobem. Pokud meta je porovnání rovno traits_type::eof, funkce volá setstate(failbit). V opačném případě se ukládá traits_type::to_char_type(meta) do Ch. Funkce vrátí *this. Další informace najdete na webu to_char_type.

Třetí funkce vrátí get(str, count, widen('\n')).

Čtvrtá funkce extrahuje až prvky count - 1 a uloží je do pole začínající na str. Vždy ukládá char_type po všech extrahovaných prvech, které ukládá. V pořadí testování se extrakce zastaví:

  • Na konci souboru.

  • Za funkcí extrahuje prvek, který porovnává rovnající delimiterse . V tomto případě se prvek vrátí do řízené sekvence.

  • Za funkcí extrahuje count - 1 prvky.

Pokud funkce extrahuje žádné prvky, volá setstate(failbit). V každém případě vrátí *this.

Pátá funkce vrátí get(strbuf, widen('\n')).

Šestá funkce extrahuje prvky a vloží je do strbuf. Extrahování se zastaví na konci souboru nebo u prvku, který se porovnává se rovnajícím delimiter, který se extrahuje. Zastaví se také bez extrahování příslušného prvku, pokud vložení selže nebo vyvolá výjimku (která je zachycena, ale není znovu vyvolána). Pokud funkce extrahuje žádné prvky, volá setstate(failbit). V každém případě vrátí *thisfunkce .

Příklad

// basic_istream_get.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   char c[10];

   c[0] = cin.get( );
   cin.get( c[1] );
   cin.get( &c[2],3 );
   cin.get( &c[4], 4, '7' );

   cout << c << endl;
}
1111

basic_istream::getline

Získá řádek ze vstupního datového proudu.

basic_istream<Char_T, Tr>& getline(
    char_type* str,
    streamsize count);

basic_istream<Char_T, Tr>& getline(
    char_type* str,
    streamsize count,
    char_type delimiter);

Parametry

count
Počet znaků, ze strbufkteré se má číst .

delimiter
Znak, který by měl ukončit čtení, pokud je zjištěn před count.

str
Řetězec, ve kterém se má psát.

Návratová hodnota

Datový proud (*this).

Poznámky

První z těchto neformátovaných vstupních funkcí vrátí getline(str, count, widen('\n')).

Druhá funkce extrahuje až k count - 1 prvkům a uloží je do pole začínající na str. Za extrahovanými elementy, které ukládá, vždy uloží znak ukončení řetězce. V pořadí testování se extrakce zastaví:

  • Na konci souboru.

  • Za funkcí extrahuje prvek, který porovnává rovnající delimiterse . V tomto případě se prvek nevloží zpět a nepřidá se k řízené sekvenci.

  • Za funkcí extrahuje count - 1 prvky.

Pokud funkce extrahuje žádné prvky nebo count - 1 prvky, volá setstate(failbit). V každém případě vrátí *this. Další informace najdete na webu setstate.

Příklad

// basic_istream_getline.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   char c[10];

   cin.getline( &c[0], 5, '2' );
   cout << c << endl;
}
121

basic_istream::ignore

Způsobí vynechání několika prvků z aktuální pozice čtení.

basic_istream<Char_T, Tr>& ignore(
    streamsize count = 1,
    int_type delimiter = traits_type::eof());

Parametry

count
Počet prvků, které se mají přeskočit z aktuální pozice čtení.

delimiter
Prvek, který pokud byl zjištěn před počtem, způsobí ignore vrácení a povolení všech prvků po delimiter přečtení.

Návratová hodnota

Datový proud (*this).

Poznámky

Neformátovaná vstupní funkce extrahuje až prvky count a zahodí je. Pokud count se však rovná numeric_limits<int>::max, je to považováno za libovolně velké. Extrakce se zastaví brzy na konci souboru nebo u prvku Ch , který traits_type::to_int_type(Ch) se porovná s delimiter (který se také extrahuje). Funkce vrátí *this. Další informace najdete na webu to_int_type.

Příklad

// basic_istream_ignore.cpp
// compile with: /EHsc
#include <iostream>
int main( )
{
   using namespace std;
   char chararray[10];
   cout << "Type 'abcdef': ";
   cin.ignore( 5, 'c' );
   cin >> chararray;
   cout << chararray;
}
Type 'abcdef': abcdef
def

basic\_istream::operator>>

Volá funkci vstupního datového proudu nebo čte formátovaná data ze vstupního datového proudu.

basic_istream& operator>>(basic_istream& (* Pfn)(basic_istream&));
basic_istream& operator>>(ios_base& (* Pfn)(ios_base&));
basic_istream& operator>>(basic_ios<Char_T, Tr>& (* Pfn)(basic_ios<Char_T, Tr>&));
basic_istream& operator>>(basic_streambuf<Char_T, Tr>* strbuf);
basic_istream& operator>>(bool& val);
basic_istream& operator>>(short& val);
basic_istream& operator>>(unsigned short& val);
basic_istream& operator>>(int& val);
basic_istream& operator>>(unsigned int& val);
basic_istream& operator>>(long& val);
basic_istream& operator>>(unsigned long& val);
basic_istream& operator>>(long long& val);
basic_istream& operator>>(unsigned long long& val);
basic_istream& operator>>(void *& val);
basic_istream& operator>>(float& val);
basic_istream& operator>>(double& val);
basic_istream& operator>>(long double& val);

Parametry

Pfn
Ukazatel funkce.

strbuf
Objekt typu stream_buf.

val
Hodnota, která se má číst z datového proudu.

Návratová hodnota

Datový proud (*this).

Poznámky

Hlavička <istream> také definuje několik operátorů globální extrakce. Další informace najdete na webu operator>> (\<istream>).

První člen funkce zajišťuje, že výraz volání ws(istr)formuláře istr >> ws a poté vrátí *this. Další informace najdete na webu ws.

Druhá a třetí funkce zajišťují, aby se ostatní manipulátory, například hex, chovaly podobně. Zbývající funkce jsou formátované vstupní funkce.

Funkce:

basic_istream& operator>>(
    basic_streambuf<Char_T, Tr>* strbuf);

extrahuje prvky, pokud strbuf není ukazatel null, a vloží je do strbuf. Extrakce se zastaví na konci souboru. Zastaví se také bez extrahování příslušného prvku, pokud vložení selže nebo vyvolá výjimku (která je zachycena, ale není znovu vyvolána). Pokud funkce extrahuje žádné prvky, volá setstate(failbit). V každém případě vrátí *thisfunkce . Další informace najdete na webu setstate.

Funkce:

basic_istream& operator>>(bool& val);

extrahuje pole a převede ho na logickou hodnotu voláním use_facet< num_get<Char_T, InIt>(getloc).get( InIt(rdbuf), Init(0), *this, getloc, val). InIt Zde je definován jako istreambuf_iterator<Char_T, Tr>. Funkce vrátí *this.

Další informace naleznete v tématu use_facet, getloc, get, rdbuf, a istreambuf_iterator.

Každá z těchto funkcí:

basic_istream& operator>>(short& val);
basic_istream& operator>>(unsigned short& val);
basic_istream& operator>>(int& val);
basic_istream& operator>>(unsigned int& val);
basic_istream& operator>>(long& val);
basic_istream& operator>>(unsigned long& val);
basic_istream& operator>>(long long& val);
basic_istream& operator>>(unsigned long long& val);
basic_istream& operator>>(void *& val);

extrahujte pole a převeďte ho na číselnou hodnotu voláním use_facet<num_get<Char_T, InIt>(getloc).get(InIt(rdbuf), Init(0), *this, getloc, val). InIt Zde je definován jako istreambuf_iterator<Char_T, Tr>a val má typ long, unsigned longnebo void * podle potřeby.

Pokud převedenou hodnotu nelze reprezentovat jako typ val, funkce volá setstate(failbit). V každém případě vrátí *thisfunkce . Další informace najdete na webu setstate.

Každá z těchto funkcí:

basic_istream& operator>>(float& val);
basic_istream& operator>>(double& val);
basic_istream& operator>>(long double& val);

extrahujte pole a převeďte ho na číselnou hodnotu voláním use_facet<num_get<Char_T, InIt>(getloc).get(InIt(rdbuf), Init(0), *this, getloc, val). InIt Zde je definován jako istreambuf_iterator<Char_T, Tr>a val má typ double nebo long double podle potřeby.

Pokud převedenou hodnotu nelze reprezentovat jako typ val, funkce volá setstate(failbit). V každém případě vrátí *this.

Příklad

// istream_basic_istream_op_is.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;

ios_base& hex2( ios_base& ib )
{
   ib.unsetf( ios_base::dec );
   ib.setf( ios_base::hex );
   return ib;
}

basic_istream<char, char_traits<char> >& somefunc(basic_istream<char, char_traits<char> > &i)
{
   if ( i == cin )
   {
      cerr << "i is cin" << endl;
   }
   return i;
}

int main( )
{
   int i = 0;
   cin >> somefunc;
   cin >> i;
   cout << i << endl;
   cin >> hex2;
   cin >> i;
   cout << i << endl;
}

basic_istream::operator=

basic_istream Přiřadí tento objekt na pravé straně operátoru. Jedná se o přiřazení přesunutí zahrnující rvalue odkaz, který nenechá kopii za sebou.

basic_istream& operator=(basic_istream&& right);

Parametry

right
Odkaz rvalue na basic_ifstream objekt.

Návratová hodnota

Vrací objekt *this.

Poznámky

Operátor člena volá swap(right).

basic_istream::peek

Vrátí další znak, který se má přečíst.

int_type peek();

Návratová hodnota

Další znak, který se přečte.

Poznámky

Neformátovaná vstupní funkce extrahuje prvek, pokud je to možné, například vrácením rdbuf->sgetc. V opačném případě se vrátí traits_type::eof. Další informace najdete v tématech sgetc a eof.

Příklad

// basic_istream_peek.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   char c[10], c2;
   cout << "Type 'abcde': ";

   c2 = cin.peek( );
   cin.getline( &c[0], 9 );

   cout << c2 << " " << c << endl;
}
abcde
Type 'abcde': abcde
a abcde

basic_istream::putback

Vloží zadaný znak do datového proudu.

basic_istream<Char_T, Tr>& putback(
    char_type Ch);

Parametry

Ch
Znak, který se má vrátit do datového proudu.

Návratová hodnota

Datový proud (*this).

Poznámky

Neformátovaná vstupní funkce vrátí zpět Ch, pokud je to možné, pokud je to možné voláním rdbuf->sputbackc. Pokud rdbuf je ukazatel null nebo pokud volání, které se sputbackc má vrátit traits_type::eof, funkce volá setstate(badbit). V každém případě vrátí *this.

Další informace naleznete v tématu rdbuf, sputbackc, eofa setstate.

Příklad

// basic_istream_putback.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   char c[10], c2, c3;

   c2 = cin.get( );
   c3 = cin.get( );
   cin.putback( c2 );
   cin.getline( &c[0], 9 );
   cout << c << endl;
}
qwq

basic_istream::read

Přečte zadaný počet znaků z datového proudu a uloží je do pole.

Tato metoda je potenciálně nebezpečná, protože volající spoléhá na kontrolu správnosti předaných hodnot.

basic_istream<Char_T, Tr>& read(
    char_type* str,
    streamsize count);

Parametry

str
Pole, ve kterém se mají číst znaky.

count
Počet znaků, které se mají přečíst.

Návratová hodnota

Datový proud ( *this).

Poznámky

Neformátovaná vstupní funkce extrahuje až prvky count a ukládá je do pole začínající na str. Extrakce se zastaví brzy na konci souboru, v takovém případě funkce volá setstate(failbit). V každém případě vrátí *this. Další informace najdete na webu setstate.

Příklad

// basic_istream_read.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main()
{
    char c[10];
    int count = 5;

    cout << "Type 'abcde': ";

    // Note: cin::read is potentially unsafe, consider
    // using cin::_Read_s instead.
    cin.read(&c[0], count);
    c[count] = 0;

    cout << c << endl;
}
abcde
Type 'abcde': abcde
abcde

basic_istream::readsome

Přečte zadaný počet hodnot znaků.

Tato metoda je potenciálně nebezpečná, protože volající spoléhá na kontrolu správnosti předaných hodnot.

streamsize readsome(
    char_type* str,
    streamsize count);

Parametry

str
Pole, ve kterém readsome jsou uloženy znaky, které čte.

count
Počet znaků, které se mají přečíst.

Návratová hodnota

Počet znaků, které se skutečně čtou, gcount.

Poznámky

Tato neformátovaná vstupní funkce extrahuje z vstupního datového proudu až prvky count a uloží je do pole str.

Tato funkce nečeká na vstup. Čte data, která jsou k dispozici.

Příklad

// basic_istream_readsome.cpp
// compile with: /EHsc /W3
#include <iostream>
using namespace std;

int main( )
{
   char c[10];
   int count = 5;

   cout << "Type 'abcdefgh': ";

   // cin.read blocks until user types input.
   // Note: cin::read is potentially unsafe, consider
   // using cin::_Read_s instead.
   cin.read(&c[0], 2);

   // Note: cin::readsome is potentially unsafe, consider
   // using cin::_Readsome_s instead.
   int n = cin.readsome(&c[0], count);  // C4996
   c[n] = 0;
   cout << n << " characters read" << endl;
   cout << c << endl;
}

basic_istream::seekg

Přesune pozici čtení v datovém proudu.

basic_istream<Char_T, Tr>& seekg(pos_type pos);

basic_istream<Char_T, Tr>& seekg(off_type off, ios_base::seekdir way);

Parametry

pos
Absolutní pozice, ve které se má ukazatel pro čtení přesunout.

off
Posun pro přesunutí ukazatele na čtení vzhledem k way.

way
Jeden z ios_base::seekdir výčtů.

Návratová hodnota

Datový proud (*this).

Poznámky

První členová funkce provádí absolutní hledání, druhá členová funkce provádí relativní hledání.

Poznámka:

Nepoužívejte druhou členovou funkci s textovými soubory, protože standardní C++ nepodporuje relativní hledání v textových souborech.

Pokud fail je false, první člen funkce volá newpos = rdbuf->pubseekpos(pos), pro nějaký pos_type dočasný objekt newpos. Pokud fail je false, druhá funkce volá newpos = rdbuf->pubseekoff( off, way). V obou případech pokud (off_type)newpos == (off_type)(-1) (operace umístění selže), funkce zavolá istr.setstate(failbit). Obě funkce vrací *this.

Pokud fail ano true, členské funkce nic nedělají.

Další informace naleznete v tématu rdbuf, pubseekpos, pubseekoffa setstate.

Příklad

// basic_istream_seekg.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main ( )
{
   using namespace std;
   ifstream file;
   char c, c1;

   file.open( "basic_istream_seekg.txt" );
   file.seekg(2);   // seek to position 2
   file >> c;
   cout << c << endl;
}

basic_istream::sentry

Vnořená třída popisuje objekt, jehož deklarace strukturuje formátované a neformátované vstupní funkce.

class sentry {
   public:
   explicit sentry(
      basic_istream<Char_T, Tr>& _Istr,
      bool _Noskip = false);
   operator bool() const;
   };

Poznámky

Pokud _Istr.good je true, konstruktor:

  • Volání _Istr.tie->flush , pokud _Istr.tie není ukazatel null.

  • Efektivně volá ws(_Istr) , pokud _Istr.flags & skipws je nenulová.

Pokud po nějaké takové přípravě, _Istr.good je false, konstruktor volá _Istr.setstate(failbit). V každém případě konstruktor ukládá hodnotu vrácenou _Istr.good v status. Pozdější volání, které operator bool tuto uloženou hodnotu doručí.

Další informace naleznete v tématu good, tie, flush, ws, flags, , skipws, a setstate.

basic_istream::swap

Vymění obsah dvou basic_istream objektů.

void swap(basic_istream& right);

Parametry

right
Odkaz lvalue na basic_istream objekt.

Poznámky

Členské funkce volá basic_ios::swap(right). Rovněž vymění počet extrakce s počtem extrakce pro right. Další informace najdete na webu basic_ios::swap.

basic_istream::sync

Synchronizuje přidružené vstupní zařízení datového proudu s vyrovnávací pamětí datového proudu.

int sync();

Návratová hodnota

Pokud rdbuf je ukazatel null, vrátí funkce hodnotu -1. V opačném případě volá rdbuf->pubsync. Pokud toto volání vrátí hodnotu -1, funkce zavolá setstate(badbit) a vrátí hodnotu -1. V opačném případě vrátí funkce nulu. Další informace najdete v tématech pubsync a setstate.

basic_istream::tellg

Zaznamenává aktuální pozici čtení v datovém proudu.

pos_type tellg();

Návratová hodnota

Aktuální pozice v datovém proudu.

Poznámky

Pokud fail je false, členské funkce vrátí rdbuf->pubseekoff(0, cur, in). V opačném případě se vrátí pos_type(-1). Další informace najdete v tématech rdbuf a pubseekoff.

Příklad

// basic_istream_tellg.cpp
// compile with: /EHsc
#include <iostream>
#include <fstream>

int main()
{
    using namespace std;
    ifstream file;
    char c;
    streamoff i;

    file.open("basic_istream_tellg.txt");
    i = file.tellg();
    file >> c;
    cout << c << " " << i << endl;

    i = file.tellg();
    file >> c;
    cout << c << " " << i << endl;
}

basic_istream::unget

Vloží poslední přečtený znak zpět do datového proudu.

basic_istream<Char_T, Tr>& unget();

Návratová hodnota

Datový proud (*this).

Poznámky

Neformátovaná vstupní funkce vrátí předchozí prvek ve streamu, pokud je to možné, například voláním rdbuf->sungetc If rdbuf je ukazatel null, nebo pokud volání, které se sungetc má vrátit traits_type::eof, volání setstate(badbit)funkce . V každém případě vrátí *this.

Další informace najdete v tématech sungetc, eof a setstate. A informace o tom, jak unget může selhat, naleznete v tématu basic_streambuf::sungetc.

Příklad

// basic_istream_unget.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;

int main( )
{
   char c[10], c2;

   cout << "Type 'abc': ";
   c2 = cin.get( );
   cin.unget( );
   cin.getline( &c[0], 9 );
   cout << c << endl;
}
abc
Type 'abc': abc
abc

Viz také

Bezpečný přístup z více vláken ve standardní knihovně C++
iostream Programování
iostreams Konvence