C ++

Gerenciando o console com as classes iostream em C ++

Gerenciando o console com as classes iostream em C ++

Na computação, o console é o teclado do computador 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, esta 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 namespace std;

Conteúdo do Artigo

  • Objetos de fluxo estreito do iostream padrão
  • Obtendo caracteres e cordas do teclado
  • Exibindo e excluindo caracteres antes de pressionar Enter
  • Envio de caracteres e strings para o monitor
  • Argumentos para um programa C ++
  • Conclusão

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.

cout

A seguinte instrução na função main () envia o texto, “Esta é a saída.”Para o terminal:

cout << "This is output.";

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 declaração forçará tudo o que for impresso pela tela para a próxima linha:

cout << "This is output." << endl;

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

cout << "This is output." << '\n';

Com o uso de '\ n', todas as linhas de texto podem ainda não aparecer na tela imediatamente. “Endl” libera a linha completa de texto para a 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 '\n' is not in the series.

cin

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 ():

char txt [50];
cout << "Enter a word and press Enter:" <> TXT;
cout << 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. Depois de 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 declaraçã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 diferentes variáveis. O seguinte segmento de código ilustra isso:

char txt [20];
int it;
float ft;
cout << "Enter 3 values and press Enter:" <> txt >> it >> ft;
cout << txt << " << it << " << ft << endl;

Observe a declaração:

cin >> txt >> it >> ft;

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

um 25 3.6

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

um 25 3.6

cerr

O seguinte programa tem um erro:

#incluir
usando namespace std;
int main ()

em myInt;
return 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 deve ser chamado de“ temp ”, então o seguinte comando g ++ enviará a mensagem de erro do compilador para o arquivo,“ erro.TXT":

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

Se o arquivo “erro.txt ”não existe, seria criado. Observe a parte “2> erro.txt ”do comando g ++.

A tela é o destino de saída padrão e também o destino de erro padrão. Se “2> erro.txt ”é omitido do comando g ++, então a mensagem de erro do compilador seria 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 << "The error message!" << '\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. Este é o 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:

char txt [50];
cout<<"Enter text and press Enter:"<>TXT;
entupir<Se o texto de entrada for "input_text", então o clog exibirá novamente "input_text" na tela.

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

#incluir
usando namespace std;
int main ()

freopen ("log.txt "," w ", saída padrão);
cout << "input_text" << 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 instrução de leitura de entrada.

O objeto cin tem métodos, com os 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:

char ch;
cout << "Input text:" << endl;
cin.get (ch);
cout << ch << endl;

A primeira declaração declara um personagem 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.

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

cout << "Input text:" << endl;
cout << cin.get() << 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:

char str [10];
cout << "Input text:" << endl;
cin.get (str, 10);
cout << str << endl;

Se a entrada for "ótimas pessoas", a saída será "ótimas pessoas", 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, 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 sub-string, delimitada à direita, pela primeira ocorrência de um caractere particular, ou pelo tamanho do fluxo da sub-string, o que vier primeiro. Se o texto de entrada para o código a seguir for "ótimas pessoas", "ótimas" será extraído:

char str [30];
cout << "Input text:" << endl;
cin.get (str, 6, 'o');
cout << str << 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 mais alto possível.

Se o texto de entrada para o código a seguir for “ótimas pessoas”, “gr” será extraído:

char str [30];
cout << "Input text:" << endl;
cin.get (str, 10, 'e');
cout << str << 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:

cout << "Input text:" << endl;
enquanto (1)
char ch = (char) cin.obter();
cout << ch;
if (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:

cout << "Input text:" << endl;
enquanto (1)
char ch = (char) cin.olhadinha();
cout << ch;
cin.obter();
if (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 diferem. Então, 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 '\n' 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 do objeto cout. Quando o texto é enviado para o 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 descarregado na 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 namespace std;
int main ()

int it = 5;
float ft = 63.5;
cout << "The " << it << " items cost $" << ft << " US." << endl;
return 0;

O resultado é:

Os 5 itens custam $ 63.5 US.

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

#incluir
usando namespace std;
struct St
char str [11] = "algumas palavras";
obj;
int main ()

cout << obj.str << '\n';
return 0;

O resultado é "algumas palavras".

Argumentos para um programa C ++

A execução do programa começa a partir da 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 é:

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

return 0;

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

artigos 3 livro caneta "casa grande"

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ários 3 caneta de livro "casa grande"

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 do programa, mais 1. Neste caso, existem 5 argumentos para o programa. Então, argc é 6. Na sintaxe, argv [argc] é uma matriz de ponteiros para strings. O primeiro valor para este array em argv [0] é dado pelo compilador. É um ponteiro para o nome do arquivo do programa. O resto dos valores são ponteiros para os argumentos do programa na ordem do usuário digitada. O tamanho desta matriz é argc. Neste caso, o tamanho é 1 + 5 = 6.

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

#incluir
usando namespace std;
int main (int argc, char ** argv)

cout << argv[0] << ", " << argv[1] << ", " << argv[2] << ", " << argv[3] << ", " << argv[4] << ", " << argv[5] << endl;
return 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ários 3 caneta de livro "casa grande"

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 na 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.

Como alterar o ponteiro do mouse e tamanho do cursor, cor e esquema no Windows 10
O ponteiro do mouse e o cursor no Windows 10 são aspectos muito importantes do sistema operacional. Isso também pode ser dito para outros sistemas ope...
Mecanismos de jogos gratuitos e de código aberto para o desenvolvimento de jogos Linux
Este artigo cobrirá uma lista de mecanismos de jogo gratuitos e de código aberto que podem ser usados ​​para desenvolver jogos 2D e 3D no Linux. Exist...
Tutorial de Shadow of the Tomb Raider para Linux
Shadow of the Tomb Raider é a décima segunda adição à série Tomb Raider - uma franquia de jogos de ação e aventura criada pela Eidos Montreal. O jogo ...