Usar a função ignore() em C++
-
Utilizar a função
ignore()
para descartar entrada de utilizador de linha de comando não pretendida -
Utilizar a função
ignore
para extrair as iniciais da entrada do utilizador em C++
Este artigo irá explicar vários métodos de como utilizar a função ignore()
em C++.
Utilizar a função ignore()
para descartar entrada de utilizador de linha de comando não pretendida
A função ignore()
é uma função de membro do std::basic_istream
e é herdada por diferentes classes de fluxo de entrada. A função descarta os caracteres no fluxo até ao delimitador dado, inclusive, e depois extrai o resto do fluxo.
A função ignore
aceita dois argumentos; o primeiro é o número de caracteres a extrair, e o segundo é o carácter delimitador.
O exemplo seguinte mostra como a função ignore
é chamada no objecto cin
para armazenar apenas 3 números e descartar qualquer outro input do utilizador. Note-se que utilizamos numeric_limits<std::streamsize>::max()
como primeiro argumento da função ignore
para forçar o caso especial e desactivar o parâmetro do número de caracteres.
#include <fstream>
#include <iostream>
#include <limits>
#include <sstream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::istringstream;
using std::numeric_limits;
using std::string;
int main() {
while (true) {
int i1, i2, i3;
cout << "Type space separated numbers: " << endl;
cin >> i1 >> i2 >> i3;
if (i1 == 0) exit(EXIT_SUCCESS);
cin.ignore(numeric_limits<std::streamsize>::max(), '\n');
cout << i1 << "; " << i2 << "; " << i3 << endl;
}
return EXIT_SUCCESS;
}
Resultado:
Type space separated numbers:
238 389 090 2232 89
238; 389; 90
Utilizar a função ignore
para extrair as iniciais da entrada do utilizador em C++
Uma forma comum de utilizar a função ignore
é procurar o fluxo de entrada para o delimitador desejado e extrair apenas os caracteres necessários.
Na amostra de código seguinte, a entrada do utilizador é analisada de modo a que apenas sejam extraídas as iniciais das strings separadas por espaço. Repare que estamos a utilizar cin.get
duas vezes para extrair um único caracter do fluxo, mas a declaração cin.ignore
entre eles assegura que cada caracter antes e incluindo o espaço seguinte é descartado.
#include <fstream>
#include <iostream>
#include <limits>
#include <sstream>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::numeric_limits;
using std::string;
using std::vector;
int main() {
char name, surname;
cout << "Type your name and surname: " << endl;
name = cin.get();
cin.ignore(numeric_limits<std::streamsize>::max(), ' ');
surname = cin.get();
cout << "Your initials are: " << name << surname << endl;
return EXIT_SUCCESS;
}
Resultado:
Type your name and surname:
Tim Cook
Your initials are: TM
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook