A definição de Iostream em C++

Jinku Hu 12 outubro 2023
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 ao stdout em C.
  • cin: é o fluxo de entrada padrão (corresponde a stdin).
  • cerr: é o fluxo de erro padrão implementado como fluxo sem buffer (corresponde a stderr).
  • clog: é o fluxo de registro padrão que não tem o equivalente em C e oferece a versão em buffer de cerr.

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 !
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artigo relacionado - C++ IO