• Nenhum resultado encontrado

I/O em C++: Stream

No documento Apostila3LinguagemCeC++ (páginas 92-95)

13 Programação em C++

13.4 I/O em C++: Stream

A linguagem C++ permite a utilização dos mecanismos de I/O definidos em C, mas define novas bibliotecas, mais adequadas ao paradigma da Orientação a Objetos. Essas bibliotecas constituem a chamada biblioteca Stream do C++, sendo esta biblioteca toda definida em termos de classes de objetos. Nela estão os três objetos: cin, cout e cerr destinados à entrada e saída de dados via terminal ou via arquivos. As definições e declarações necessárias para o uso de “streams” estão contidas no arquivo <iostream.h>.

13.4.1 A stream de saída cout

Cout é um objeto de uma clase de I/O predefinida em C++. Para mostrar os dados em um programa C++, deve-se utilizar a stream cout. Por default cout está associada a uma saída padrão (stdout), i.e., o ao terminal de vídeo. Sintaxe de cout :

cout << expressão;

onde,

<< : é o operador de inserção usado a fim de direcionar a saída de dados para a saída padrão (vídeo).

expressão : é qualquer combinação de caracteres ou variável.

Abaixo apresentamos alguns exemplos da utilização de cout. Note que em nenhuma das declarações da stream cout são formatados os dados a serem apresentados. Essa formatação é feita pela própria stream.

Variáveis C++ Resultado int x = 2; Cout << “x = ” << x; x = 2 Float f = 1.2, g = 3; Cout << f << “ ” << g; 1.20 3.00 Double dou = 2.14; Char ch = ‘F’; Cout << “valor = ” << dou << “\nsex = ” << ch; valor = 2.14 sex = F

No último exemplo acima, mostramos o uso do caracter especial ‘\n’ para fazer com que o computador pule uma linha antes de continuar escrevendo dados na tela. Podemos utilizar todos os caracteres especiais definidos para printf() da mesma maneira que utilizamos agora ‘\n’. Uma lista completa destes caracteres está em 3.1.

O objeto cout utiliza flags de formatação para sinalizar as opções de formatação dos dados. Os flags (sinalizadores) de formato (definidos em <iomanip>) são os seguintes:

Manipulador Significado

skipws Ignora o espaço em branco na entrada

left Saída ajustada à esquerda

right Saída ajustada à direita

Curso de Linguagem Computacional C/C++

dec Conversão em decimal

oct Conversão em octal

hex Conversão em hexadecimal

showbase Mostra o indicador de base na saída

showpoint Mostra ponto decimal (para float)

uppercase Saída hexadecimal maiúscula

showpos Mostra o sinal ‘+’ em inteiros positivos

scientific usa notação científica de ponto flutuante 1.23E2

fixed usa notação de ponto flutuante 1.23

unitbuf Libera (flush) todas as streams depois da inserção

stdio Libera (flush) stdout, stderr depois de inserção A sintaxe para usar esses sinalizadores (ou flags) é a seguinte:

cout.setf(ios::<sinalizador>); // para ligar

cout.setf(ios::scientific);

cout << 12.345; // Imprimirá : 0.12345E2

cout.unsetf(ios::<sinalizador>); // para desligar

cout.unsetf(ios::scientific);

cout << 12.345 // Imprimirá: 12.345

O objeto cout permite estabelecer o tamanho de um campo para a impressão. Isto significa que podemos definir o número de colunas que serão ocupados por um valor ou texto a ser impresso. Geralmente, a definição de tamanho de campos é usada para alinhamento e estética de um relatório.

Os manipuladores de formato são utilizados para manipular a formatação dos dados em streams de saída. Alguns manipuladores são idênticos ao sinalizadores, a diferença está na forma mais compacta e na inclusão de outra biblioteca de classes <iomanip>.

Manipulador Significado

dec Passa ara base decimal

oct Passa ara base octal

hex Passa ara base hexadecimal

ws Extrai caracteres de espaço em branco

endl Insere nova linha e libera stream

ends Insere término nulo em string ‘\0’

flush Libera o buffer de saída ostream alocado

setbase(n) Ajusta o formato de conversão para a base n. default n = 0;

resetiosflags(long) Limpa os bits de formato em ins ou outs especificadas.

setiosflags(long) Ajusta os bits de fomato em ins ou outs especificadas. setfill(int n) Ajusta o caracter de preenchimento para n

setprecision(int n) Ajusta a precisão do ponto flutuante para n

setw(int n) Ajusta o tamanho do campo para n Exemplo do uso destes manipuladores:

// Exemplo do emprego de Cout #include <iostream>

#include <iomanip> using namespace std;

Curso de Linguagem Computacional C/C++ { float lap = 4.875; float bor = 234.5421234546; int can = 42; int cad = -8; cout << "\n\n" << setiosflags(ios::left); cout << setprecision(2);

cout << "\n\t" << "Lapis " << setw(12) << lap; cout << "\n\t" << "Borracha " << setw(12) << bor; cout << "\n\t" << "Canetas " << setw(12) << can; cout << "\n\t" << "Cadernos " << setw(12) << cad;

cout << "\n\t" << setfill('.') << "Fitas " << setw(12) << "TYE";

return 0; }

Observação: Todos esses cabeçalhos usados oferecem recursos no ambiente de nomes std, de modo que, para usar os nomes que eles oferecem, precisamos ou usar qualificação explícita com std: : ou trazer os nomes para o ambiente de nomes global com

using namespace std;

Observação: quando a função main( ) é chamada, esta recebe dois argumentos especificando o número de argumentos, usualmente chamado argc, e um array de argumentos, usualmente chamado de argv. Os argumentos são strings de caracteres, de modo que o tipo de argv é char* [argc+1]. O nome do programa é passado como argv[0], de modo que argc é sempre no mínimo 1. A lista de argumentos é terminada por um zero; isto é, argv[argc] = = 0.

Observação: Se o tamanho do campo especificado em setw for menor que o tamanho mínimo necessário para imprimir o valor associado, a impressão utilizará o número necessário de colunas, ignorando o tamanho do campo.

Outro exemplo do emprego destes manipuladores:

// Exemplo do emprego de hex, dec e oct #include <iostream>

int main(int argc, char* argv[])

{

int n = 15;

cout << "\n" << "Hexadecimal \t" << hex << n; cout << "\n" << "Decimal \t" << dec << n; cout << "\n" << "Octal \t" << oct << n; return 0;

}

13.4.2 A stream de entrada cin

A forma de entrar com dados em um programa C++ é através do objeto cin. Tratra-se de um fluxo associado à entrada padrão do computador (stdin, i.e, o teclado). A sintaxe de cin é:

cin >> variável;

Curso de Linguagem Computacional C/C++

>> : é o operador de extração usado para direcionar a entrada de dados à entrada padrão (teclado). Através do contexto, o compilador sabe que este operador não será o operador para deslocamento de bits mas sim o operador de leitura de dados.

variável : é o nome da variável onde desejamos guardar os valores lidos.

Na tabela a seguir, apresentamos alguns exemplos da leitura de dados através de cin. Note que em C++ não é necessário formatar o dado que está sendo lido. Cin faz isto automaticamente, de acordo com a declaração da variável.

Variáveis C++ C

int x; cin >> x; scanf(“%d”,&x);

float f,g; cin >> f >> g; scanf(“%f %f”, &f, &g); double dou; char ch; cin >> dou >> ch; scanf(“%Lf %c”, &dou, &ch);

O objeto cin faz com que o programa aguarde que você digite o dado a ser adquirido e pressione a tecla [ENTER] para finalizar a entrada. O operador >> pode apresentar-se diversas vezes numa instrução com a finalidade de permitir a introdução de diversos valores ao mesmo tempo. Múltiplas entradas são digitadas separadas por um espaço em branco. O objeto cin entende um espaço em branco como término de uma entrada e o [ENTER] como finalizador geral.

Podemos ler números em outras bases numéricas, utilizando os manipuladores hex, dec e oct apresentados anteriormente.

int n = 0;

cin >> hex >> n;

A biblioteca stream define outras funções para leitura e escrita de dados que não serão aqui apresentadas. Todas as funções apresentadas na secção 3 podem ser aqui empregadas.

No documento Apostila3LinguagemCeC++ (páginas 92-95)

Documentos relacionados