A definição de Iostream em C++
Este guia discute como utilizar a biblioteca básica de entrada / saída em C++.
Utilize o cabeçalho <iostream>
para incluir objetos de fluxo global em C++
A biblioteca de entrada / saída é a parte central do C++ STL utilizada por quase todos os programas do mundo real. As operações de E / S do C++ são abstraídas na forma de fluxos, que podem ser considerados sequências de dados genéricas. Uma abstração de fluxo é implementada usando várias classes herdadas e é exposta ao usuário como diferentes objetos nomeados especializados para certas operações de E / S. Observe que a biblioteca de E / S baseada em fluxo como um todo pode ser usada para imprimir texto no console ou ler / gravar dados de arquivos no disco. Você pode pensar na biblioteca de fluxos como o meio principal para o programa C++ interagir com o sistema de arquivos e dispositivos.
As duas classes de fluxo essenciais são istream
e ostream
, correspondendo aos fluxos usados para ler e escrever os dados. Essas classes fornecem operações em fluxos de caracteres. Existem quatro objetos de fluxo global frequentemente utilizados por programas para realizar operações como obter a entrada do usuário ou imprimir as mensagens de erro. Esses objetos são:
cout
: representa um fluxo de saída padrão correspondente aostdout
em C.cin
: é o fluxo de entrada padrão (corresponde astdin
).cerr
: é o fluxo de erro padrão implementado como fluxo sem buffer (corresponde astderr
).clog
: é o fluxo de registro padrão que não tem o equivalente em C e oferece a versão em buffer decerr
.
Outra parte importante da biblioteca de fluxo de E / S são os operadores usados para encadear as operações entre diferentes objetos. O operador <<
, chamado de operador de inserção de fluxo, envia os dados para um objeto de fluxo. Por outro lado, o operador >>
é conhecido como extrator de fluxo. Observe que esses operadores geralmente conduzem operações de deslocamento em tipos aritméticos, mas são implementados como operadores sobrecarregados neste caso.
No exemplo a seguir, mostramos o uso básico das classes de E / S baseadas em fluxo C++. Usamos o objeto cout
para enviar o conteúdo da string
para o console. Uma vez que cout
corresponde a um fluxo de saída padrão, usamos o operador de inserção para enviar os dados, e normalmente eles são impressos no console. Observe que o objeto endl
é chamado de manipulador que produz um caractere de nova linha e esvazia o buffer de saída.
Os manipuladores de fluxo vêm em vários tipos, existem aqueles que modificam a entrada / saída como endl
e existem aqueles que forçam o objeto de fluxo a interpretar a entrada / saída de forma diferente. Os últimos incluem os manipuladores de base numérica como: dec
, hex
e oct
.
#include <iostream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
int main() {
string str1("what does iostream mean?");
cout << str1 << endl;
cout << str1 << " - " << str1 << endl;
return EXIT_SUCCESS;
}
Resultado:
what does iostream mean ? what does iostream mean ? -what does iostream mean ?
Conforme mostrado no programa anterior, o recurso mais poderoso de operadores de fluxo e objetos é ser encadeado sequencialmente várias vezes. Neste caso, vemos que podemos combinar os valores literais com outras variáveis para enviar todos eles para um fluxo cout
. Em seguida, empregamos os objetos cin
e cerr
para ler a entrada do usuário e imprimir os dados lidos.
Observe que o objeto do tipo que precisa ser lido deve ser declarado antecipadamente como o número flutuante x
. Outra propriedade útil dos operadores de inserção / extração é que eles retornam o valor diferente de zero se a operação falhar. Alternativamente, você pode usar as funções de membro fail
e bad
para verificar se o objeto de fluxo fornecido encontrou erros específicos.
#include <iostream>
#include <string>
using std::cerr;
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
float x;
cout << "enter float: ";
if (!(cin >> x)) {
cerr << "error while reading the floating point value!" << endl;
return EXIT_FAILURE;
}
cout << x;
return EXIT_SUCCESS;
}
Resultado:
error while reading the floating point value !
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