std::istream::peek în C++

Arată următorul caracter din intrare fără să-l consume.

Sintaxă
int peek();

Ce face std::istream::peek

peek() se uită la următorul caracter, dar îl lasă în flux: următoarea citire îl va găsi tot acolo. Este util când trebuie să decizi cum citești mai departe, de exemplu dacă urmează un număr sau un cuvânt.

Returnează caracterul ca int, sau EOF dacă nu mai există date.

Ce returnează

Codul următorului caracter, sau EOF.

Exemple

Exemplul 1: Număr sau cuvânt?

#include <cctype>
#include <iostream>
#include <sstream>
#include <string>

int main() {
    std::istringstream in("12 mere 7 pere 3");
    while (in >> std::ws && in.peek() != EOF) {
        if (std::isdigit(in.peek())) {
            int n;
            in >> n;
            std::cout << "număr: " << n << '\n';
        } else {
            std::string cuvant;
            in >> cuvant;
            std::cout << "cuvânt: " << cuvant << '\n';
        }
    }
}

Rezultat

număr: 12
cuvânt: mere
număr: 7
cuvânt: pere
număr: 3

Exemplul 2: Ignorarea comentariilor dintr-un fișier de setări

#include <iostream>
#include <limits>
#include <sstream>
#include <string>

int main() {
    std::istringstream setari("# setări\noras Iași\n# limba\nlimba ro\n");
    std::string cheie, valoare;
    while (setari.peek() != EOF) {
        if (setari.peek() == '#') {
            setari.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            continue;
        }
        setari >> cheie >> valoare >> std::ws;
        std::cout << cheie << " = " << valoare << '\n';
    }
}

Rezultat

oras = Iași
limba = ro

Greșeli frecvente

  • Crezi că peek avansează în flux și ajungi într-o buclă infinită, citind mereu același caracter.

Comenzi înrudite

  • std::istream::get: Citește un singur caracter, inclusiv spații și rânduri noi; put scrie un caracter.
  • std::istream::ignore: Sare peste caractere din intrare, de obicei până la sfârșitul rândului curent.
  • std::isalpha: Verifică tipul unui caracter: literă, cifră, spațiu, majusculă, minusculă sau punctuație.