Gerenciando o console com as classes iostream em C ++

Managing Console With Iostream Classes C



Na computação, o console é o teclado e o monitor do computador. No passado, a saída era enviada diretamente para a tela do monitor e não para uma janela exibida no monitor. Para o usuário comum de computador, os aplicativos de hoje não usam o monitor explicitamente. Esses aplicativos usam janelas exibidas no monitor. No entanto, o programador do computador ainda precisa usar a tela do monitor. Embora o programador ainda precise usar a tela do monitor, o sistema operacional não permite que ele faça isso. O sistema operacional fornece uma janela que simula a tela do monitor. No sistema operacional Windows, essa janela é chamada de Prompt de comando. No sistema operacional Linux e suas variantes, esta janela é chamada de terminal.

Espera-se que o leitor já saiba usar o Prompt de Comando ou o Terminal. Este artigo explica como ler caracteres e strings do teclado e enviar caracteres e strings para o terminal (ou prompt de comando). Todo programador C ++ precisa saber neste artigo.







Para ter entrada do teclado e saída para o terminal, o programa deve começar com:



#incluir
usando namespacehoras;

Conteúdo do Artigo

Objetos de fluxo estreito do iostream padrão

A classe iostream, os objetos padrão, cout, cin, cerr e clog, foram instanciados e já estão na biblioteca padrão. O programador apenas os usa, sem instanciá-los novamente.



custo

A instrução a seguir na função main () envia o texto, Esta é a saída. para o terminal:





custo << 'Esta é a saída.';

cout é um objeto iostream de saída na biblioteca padrão, já instanciado.<< is the insertion operator, which sent the bytes, This is output. to the output stream object, cout. When the statement is executed, the text appears on the screen.

Com a declaração acima, o prompt de comando reapresentado aparece à direita da frase de saída. Não vai para a próxima linha. endl no final da seguinte instrução forçará tudo o que for impresso pela tela para a próxima linha:



custo << 'Esta é a saída.' <<endl;

endl é uma variável predefinida. O conteúdo da tela também pode ser forçado para a próxima linha com:

custo << 'Esta é a saída.' << ' n';

Com o uso de ' n', todas as linhas de texto ainda podem não aparecer na tela imediatamente. endl libera a linha completa de texto na tela.

Nota: uma string enviada para cout está entre aspas duplas, enquanto um caractere enviado está entre aspas simples. Uma série de strings e caracteres podem ser enviados em uma instrução, cada uma precedida por<< . All that will appear in one line at the output if ‘ ’ is not in the series.

Gin

cin é o objeto de entrada iostream padrão, já instanciado e disponível na biblioteca padrão. Considere o seguinte segmento de código na função main ():

CaracteresTXT[cinquenta];
custo << 'Digite uma palavra e pressione Enter:' TXT;
custo <<TXT<<endl;

A primeira instrução declara uma matriz vazia de 50 caracteres. A segunda instrução instrui o usuário a digitar uma palavra na próxima linha da tela e pressionar a tecla Enter. Observe o uso de 'endl' que força o usuário a inserir texto na próxima linha da tela. Conforme o usuário digita o texto, o texto inserido é ecoado na tela enquanto vai para o objeto cin. Após pressionar Enter, a terceira instrução no segmento de código é executada. Esta terceira instrução envia o texto inserido para a variável, txt. O texto inserido não deve ter mais de 50 caracteres neste caso. Observe o uso do operador de extração, >>. A última instrução exibe o texto inserido na tela.

cin pode pegar mais de uma palavra do teclado, separadas por espaços. Essas palavras terão que ser extraídas em variáveis ​​diferentes. O seguinte segmento de código ilustra isso:

CaracteresTXT[vinte];
intisto;
flutuadorpés;
custo << 'Insira 3 valores e pressione Enter:' TXT>>isto>>pés;
custo <<TXT<< '' <<isto<< '' <<pés<<endl;

Observe a declaração:

Gin >>TXT>>isto>>pés;

A primeira palavra é extraída para txt, a próxima a ela e a última para ft. Se a entrada foi,

125 3,6

então a saída pelo segmento de código seria,

125 3,6

cerr

O seguinte programa tem um erro:

#incluir
usando namespacehoras;

inta Principal()
{
em myInt;

Retorna 0;
}

A primeira declaração em main () não está correta. Se o nome do arquivo com o código for temp.cc e o arquivo executável resultante for chamado de temp, o seguinte comando g ++ enviará a mensagem de erro do compilador para o arquivo, error.txt:

g++ -o temp temp.DC 2>erro.TXT

Se o arquivo error.txt não existir, ele será criado. Observe a parte 2> error.txt do comando g ++.

A tela é o destino de saída padrão e também o destino de erro padrão. Se 2> error.txt for omitido do comando g ++, a mensagem de erro do compilador será enviada para o destino de erro padrão, que ainda é a tela (monitor).

O objeto stream que representa o destino de saída padrão é cout. O objeto de fluxo que representa o destino de erro padrão é cerr. Um erro de tempo de execução do programa pode ser enviado para a tela da seguinte forma:

cerr << 'A mensagem de erro!' << ' n';

entupir

Um aplicativo recebe diferentes entradas em momentos diferentes. Todas as entradas podem ser exibidas novamente na tela. Todas as entradas podem ser salvas em um arquivo. Isso é registro. O destino de registro padrão é a tela. O objeto de fluxo de registro padrão é um entupimento. O código a seguir exibirá novamente o texto de entrada na tela:

CaracteresTXT[cinquenta];
custo<<'Digite o texto e pressione Enter:'TXT;
entupir<<TXT<<endl;

Se o texto de entrada for 'input_text', então o clog exibirá novamente 'input_text' na tela.

Na prática, o log geralmente é redirecionado para um arquivo. O programa a seguir ilustra isso:

#incluir
usando namespacehoras;

inta Principal()
{
freopen( 'log.txt','no',stdout);

custo << 'Entrada de texto' <<endl;
}

Observe o uso da função freopen () e seus argumentos. Seu primeiro argumento é o nome do arquivo de log. Se o arquivo não existir, ele será criado. Seu segundo argumento é 'w' para 'escrever'. Seu terceiro argumento é stdout para saída padrão. A segunda instrução na função main () usa cout para enviar o texto de registro para o arquivo. Nota: O código de entrada real não foi mostrado neste programa.

Obtendo caracteres e cordas do teclado

Enquanto o usuário está digitando a entrada, os caracteres são enviados para o buffer de fluxo de entrada e exibidos na tela. Quando o usuário pressiona a tecla Enter, todos os caracteres estão no buffer; além disso, o cursor vai para o início da próxima linha abaixo, na tela. O programa então continua para a próxima instrução do programa, após a leitura da instrução de entrada.

O objeto cin possui métodos, dos quais esta seção se preocupa.

Lendo o primeiro personagem

get (char_type & c):
O segmento de código a seguir mostra como ler o primeiro caractere, do buffer de fluxo de entrada:

CaracteresCH;
custo << 'Entrada de texto:' <<endl;
Gin.pegue(CH);
custo <<CH<<endl;

A primeira declaração declara um caractere sem atribuição. A segunda instrução diz ao usuário para inserir um caractere. Quando o usuário digita o caractere e pressiona a tecla Enter, a terceira instrução copia o caractere do buffer de fluxo de entrada para a variável, ch.

Mesmo se o usuário digitar mais de um caractere, o primeiro caractere será levado pelo segmento de código.

pegue():
get () sem argumento, retorna o código ASCII decimal. Considere o seguinte segmento de código:

custo << 'Entrada de texto:' <<endl;
custo << Gin.pegue() <<endl;

Se a entrada for 'asdfg', 97 será retornado, que é o código ASCII decimal para 'a'.

get (char_type * s, streamsize n)

Depois que o usuário insere uma frase e pressiona a tecla Enter, vários caracteres começando do primeiro podem ser extraídos do buffer cin stream. O seguinte código pode ser usado:

Caracteresp[10];
custo << 'Entrada de texto:' <<endl;
Gin.pegue(str,10);
custo <<p<<endl;

Se a entrada for 'gente boa', então a saída será 'gente boa', de 9 caracteres e não de 10. O caractere NUL da string ( 0) ocupa a décima posição no argumento get. Então, para ter 9 caracteres em str, seu tamanho de armazenamento deve ser pelo menos 10, e o argumento get () deve ser 11. Se a linha de entrada inteira for desejada, então o número de armazenamento da string deve ser pelo menos o número de caracteres digitados, mais 1. Portanto, se 12 caracteres forem digitados para a linha inteira, o número deve ser 13 para o tamanho do armazenamento da string (str) e 13 para o argumento get (). Observe que um espaço é contado como um caractere.

get (char_type * s, streamsize n, char_type delim)
É possível extrair uma sequência secundária, delimitada à direita, pela primeira ocorrência de um caractere particular, ou pelo tamanho do fluxo da sequência secundária, o que vier primeiro. Se o texto de entrada para o código a seguir for ótimo, então ótimo seria extraído:

Caracteresp[30];
custo << 'Entrada de texto:' <<endl;
Gin.pegue(str,6,'ou');
custo <<p<<endl;

A sexta posição desde o início é o caractere de espaço e delimita exclusivamente a substring extraída. A sexta posição vem primeiro antes do único caractere, 'o'. Observe que o tamanho de armazenamento para str pode ser o maior possível.

Se o texto de entrada para o código a seguir for ótimo, gr seria extraído:

Caracteresp[30];
custo << 'Entrada de texto:' <<endl;
Gin.pegue(str,10,'E');
custo <<p<<endl;

A primeira ocorrência de 'e' vem primeiro antes da décima posição.

Obtendo todos os caracteres de uma linha

Após pressionar a tecla Enter, todos os caracteres digitados na linha, podem ser obtidos conforme mostrado no seguinte código:

custo << 'Entrada de texto:' <<endl;
enquanto (1) {
CaracteresCH= (Caracteres)Gin.pegue();
custo <<CH;
E se (CH== ' n')
pausa;
}

A conversão com (char) converte cada número decimal no caractere ASCII correspondente.

olhadinha()

As funções-membro get () não lêem apenas o próximo caractere; eles o removem do buffer de fluxo. No entanto, a função de membro peek () simples lê o próximo caractere (começando do primeiro) sem removê-lo do buffer. No código a seguir, cada caractere é lido primeiro com a função peek () antes de ser removido, pela função get (). Tudo o que acontece depois que o usuário pressiona a tecla Enter:

custo << 'Entrada de texto:' <<endl;
enquanto (1) {
CaracteresCH= (Caracteres)Gin.olhadinha();
custo <<CH;
Gin.pegue();
E se (CH== ' n')
pausa;
}

Se os próximos caracteres não forem removidos por get (), peek () estará lendo apenas o primeiro caractere e o loop irá iterar indefinidamente.

Exibindo e excluindo caracteres antes de pressionar Enter

Observe que com o objeto cin, a tecla Enter deve ser pressionada antes que haja ação. Bem, é possível que os caracteres sejam exibidos enquanto são digitados e apagados antes de pressionar a tecla Enter. No entanto, isso significa interface com o sistema operacional. Os sistemas operacionais são diferentes. Portanto, isso significa codificação diferente para sistemas operacionais diferentes. Portanto, este tópico merece um tutorial totalmente diferente - veja mais tarde.

Envio de caracteres e strings para o monitor

O objeto cout é um objeto de fluxo de saída, já instanciado e presente na biblioteca padrão C ++. cout é o principal objeto usado para enviar caracteres e strings para o monitor. Isso é feito com o operador de inserção,<< . With the cin object, the text is obtained line-by-line. With the cout object, the text is added onto the same line until ‘ ’ or endl is encountered.

Expressões que resultam em escalares podem ser argumentos para o operador de inserção. O operador converte o escalar em texto e coloca o texto no fluxo de objetos cout. Quando o texto é enviado ao objeto cout, ele normalmente aparece na tela (monitor). No entanto, ocasionalmente, pode não aparecer imediatamente. Para forçar o texto na tela, insira o valor especial, endl, logo após inserir o texto. Isso fará com que o texto seja liberado para a tela e uma nova linha será adicionada. Nota: ‘ n’ simplesmente adiciona uma nova linha, mas não liberta o texto para a tela.

O programa a seguir mostra como imprimir os valores de int, float e texto comum na tela:

#incluir
usando namespacehoras;

inta Principal()
{
intisto= 5;
flutuadorpés= 63,5;
custo << 'O ' <<isto<< 'itens custam $' <<pés<< ' NÓS.' <<endl;

Retorna 0;
}

O resultado é:

o5itens custam $63,5NÓS.

O programa a seguir mostra como a string de um objeto instanciado de uma classe é impressa:

#incluir
usando namespacehoras;

estruturaSt{
Caracteresp[onze] = 'algumas palavras';
}obj;

inta Principal()
{
custo <<obj.p << ' n';

Retorna 0;
}

A saída é 'algumas palavras'.

Argumentos para um programa C ++

A execução do programa começa na função main (). A função main () na verdade tem dois parâmetros opcionais. A sintaxe da função main () com os parâmetros opcionais é:

inta Principal(intargc,Caracteres *argv[argc])
{

Retorna 0;
}

Suponha que o nome do arquivo C ++ executável seja temporário. Suponha que os argumentos que o programa precisa de seu ambiente (sistema operacional), digitados pelo usuário, sejam,

artigos3caneta de livro'casarão'

Existem 5 argumentos aqui: artigos, 3, livro, caneta e casa grande

Cada um é um texto. Um argumento numerado para um programa é texto. Em outras palavras, cada argumento é uma string. casa grande está entre aspas porque é uma frase. O comando do terminal para executar este programa seria:

./artigos temporários3caneta de livro'casarão'

Supondo que o arquivo temporário esteja no diretório inicial. Observe que espaços e não vírgulas separam os argumentos.

Agora, na sintaxe da função main (), argc é o número de argumentos para o programa, mais 1. Nesse caso, há 5 argumentos para o programa. Portanto, argc é 6. Na sintaxe, argv [argc] é uma matriz de ponteiros para strings. O primeiro valor para esta matriz em argv [0] é fornecido pelo compilador. É um ponteiro para o nome do arquivo do programa. O restante dos valores são ponteiros para os argumentos do programa na ordem do usuário digitada. O tamanho desta matriz é argc. Nesse caso, o tamanho é 1 + 5 = 6.

Suponha que, na compilação, o seguinte programa seja denominado temp:

#incluir
usando namespacehoras;

inta Principal(intargc,Caracteres**argv)
{

custo <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[3] << ',' <<argv[4] << ',' <<argv[5] <<endl;

Retorna 0;
}

Observe aqui que a matriz 'char * argv [argc]' foi declarada como 'char ** argv'.

Se este programa for executado com o comando do terminal,

./artigos temporários3caneta de livro'casarão'

então a saída seria:

./temp, artigos,3, livro, caneta, casa grande

Observe que o caminho do diretório foi incluído com o nome do arquivo executável.

Além disso, observe que durante a execução do programa (chamada do programa), o valor para argc não foi enviado.

Conclusão

A classe iostream tem quatro objetos importantes que são cout, cin, cerr e clog. cin é um objeto de entrada, enquanto o resto são objetos de saída. Enquanto um programa está sendo executado, a entrada para o programa é diferente de quando o programa deve começar a ser executado. Quando um programa começa a ser executado, a entrada para o programa é associada ao comando para executar o programa, separados por espaços.