std::istream::ignore în C++

Sare peste caractere din intrare, de obicei până la sfârșitul rândului curent.

Sintaxă
std::istream& ignore(std::streamsize n = 1, int delimitator = EOF);
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

Ce face std::istream::ignore

ignore(n, delim) aruncă cel mult n caractere din intrare, oprindu-se după primul delim întâlnit (care este și el aruncat). Fără argumente, sare peste un singur caracter.

Forma ignore(std::numeric_limits<std::streamsize>::max(), '\n') înseamnă „aruncă tot până la sfârșitul rândului, oricât de lung ar fi”. Se folosește după std::cin >> x, înainte de std::getline, sau după o citire greșită, ca să scapi de restul rândului.

Parametri

Parametru Descriere
n Numărul maxim de caractere de aruncat.
delimitator Caracterul la care se oprește (inclusiv). Implicit nu există.

Ce returnează

Fluxul.

Exemple

Exemplul 1: Citirea unui număr, apoi a unui rând întreg

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

int main() {
    int camera;
    std::string nume;
    std::cin >> camera;
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    std::getline(std::cin, nume);
    std::cout << "Camera " << camera << ": " << nume << '\n';
}

Ce scrie utilizatorul (intrare)

204 (etaj 2)
Ana Maria Popescu

Rezultat

Camera 204: Ana Maria Popescu

Exemplul 2: Sărirea peste antetul unui CSV

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

int main() {
    std::istringstream csv("produs,pret\npaine,4.5\nlapte,7.99\n");
    csv.ignore(std::numeric_limits<std::streamsize>::max(), '\n');   // primul rând
    std::string rand;
    while (std::getline(csv, rand)) {
        std::cout << rand << '\n';
    }
}

Rezultat

paine,4.5
lapte,7.99

Exemplul 3: Sărirea peste câteva caractere

#include <iostream>
#include <sstream>

int main() {
    std::istringstream data("19.10.2026");
    int zi, luna, an;
    data >> zi;
    data.ignore();   // punctul
    data >> luna;
    data.ignore(1);  // al doilea punct
    data >> an;
    std::cout << "Zi " << zi << ", luna " << luna << ", anul " << an << '\n';
}

Rezultat

Zi 19, luna 10, anul 2026

Greșeli frecvente

  • Scrii std::cin.ignore() fără argumente și crezi că ai golit rândul: aruncă un singur caracter. Dacă după număr erau spații, getline citește tot restul.
  • Uiți #include <limits> pentru std::numeric_limits.

Comenzi înrudite

  • std::getline: Citește un rând întreg, cu spații cu tot, într-un std::string.
  • std::cin: Citește valori de la tastatură în variabile, cu operatorul >>.
  • std::istream::peek: Arată următorul caracter din intrare fără să-l consume.
  • std::istream::get: Citește un singur caracter, inclusiv spații și rânduri noi; put scrie un caracter.