freeCodeCamp/guide/portuguese/cplusplus/input-and-output/index.md

6.9 KiB

title localeTitle
Input and Output Entrada e saída

Entrada e Saída com Fluxos

Para imprimir coisas no console, ou ler a partir dele, use cout e cin , que são os chamados streams . Essa metáfora é usada porque você usa fluxos como o que você usaria uma pia ou um toque: ou você descarrega dados em uma pia ( cout ) ou obtém dados de um toque ( cin ).

Saída com cout

O programa "Hello World" usa cout para imprimir "Hello World!" para o console:

#include<iostream> 
 using namespace std; 
 
 int main() 
 { 
  cout << "Hello world!" << endl; 
 } 

As duas primeiras linhas no topo são necessárias para você usar cout e outros fluxos. #include<iostream> faz com que os objetos de fluxo estejam disponíveis e using namespace std; permite que você digite cout diretamente ao invés de ter que digitar std::cout , isto é, ter que especificar que queremos usar cout do namespace std .

cout significa "Console Output" e é um chamado fluxo de saída que representa o console. Quando você quiser imprimir algo no console, você pode colocá-lo em cout ; imagine-o como um buraco que leva ao terminal. Para colocar coisas neste buraco, uma de cada vez, você usa o operador << , também conhecido como o operador de inserção 1 . O operador pode ser acorrentado, ou seja, você pode colocar várias coisas em uma após a outra. O seguinte irá imprimir "O bolo é uma mentira":

cout << "The cake " << "is " << "a " << "lie." << endl;

endl significa "End Line" e é outro item que vem de <iostream> . Quando você coloca endl em cout , ele irá imprimir um caractere de nova linha ( "\ n") para o console, e também alinhada cout , o que significa que ele irá forçar cout para imprimir tudo o que você colocar nele agora. Se você não colocar endl em cout , cout pode manter os dados que você colocou nele, mas esperar por mais dados antes de realmente imprimir tudo. Isto é chamado de buffer e é muito bom para o desempenho, mas se você já tiver dado tudo o que é suposto para imprimir, você quer cout imprimi-lo immediatelly. Portanto, é uma boa prática terminar com endl em lugares onde faz sentido.

Quase tudo pode ser colocado em um fluxo: strings, números, variáveis, expressões, etc. Aqui estão alguns exemplos de inserções de fluxo válidas:

// Notice we can use the number 42 and not the string "42". 
 cout << "The meaning of life is " << 42 << endl;` // Output: The meaning of life is 42 
string name = "Tim"; 
 cout << "Except for you, " << name << endl;`// Output: Except for you, Tim 
string name = "Tim"; 
 cout << name; 
 cout << " is a great guy!" << endl;` 
 // Output: Tim is a great guy! 
int a = 3; 
 cout << a*2 + 18/a << endl;`// Output: 12 

Uma nota sobre o espaço em branco

C ++ sempre coloca você no controle e faz exatamente as coisas que você diz para fazer. Isso às vezes pode ser surpreendente, como no exemplo a seguir:

string name = "Sarah"; 
 cout << "Good morning" << name << "how are you today? << endl; 

Você pode esperar que seja impresso "Bom dia Sarah, como você está hoje?", Mas na verdade, a saída seria "Bom dia, Sarah, como você está hoje?". A razão para esse bug é que você não escreveu espaços nas strings ao redor do name , e assim, como você não especificou nenhum espaço, o cout não imprimiu nenhum. A versão correta seria: cout << "Good morning " << name << " how are you today? << endl;

Quebras de linha também não acontecem sozinhas. Você pode pensar que isso imprimiria uma receita em quatro linhas:

cout << "To make bread, you need:"; 
 cout << "* One egg"; 
 cout << "* One water"; 
 cout << "* Two wheat"; 

mas a saída é na verdade tudo em uma linha: "Para fazer pão, você precisa: * Um ovo * Uma água * Dois de trigo". Isso ocorre porque não há caracteres de nova linha no final das linhas, portanto, naturalmente, o C ++ assume que não queremos imprimir caracteres de nova linha.

Você poderia consertar isso adicionando endl s após cada linha, porque, como discutido anteriormente, o endl insere um caractere de nova linha no fluxo de saída. No entanto, isso também força o buffer a ser liberado, o que nos perde um pouco o desempenho, já que poderíamos imprimir todas as linhas de uma só vez. Portanto, o melhor seria adicionar caracteres reais de nova linha no final das linhas e usar somente endl no final:

cout << "To make bread, you need:\n"; 
 cout << "* One egg\n"; 
 cout << "* One water\n"; 
 cout << "* Two wheat" << endl; 

Se você está apenas imprimindo uma pequena receita, o tempo que você economiza é minúsculo e não vale a pena, mas se você estiver imprimindo milhões de itens, a diferença pode ser muito perceptível.

Entrada com cin

Para ler a partir do console, você usa o fluxo de entrada cin da mesma forma como faria cout , mas em vez de colocar as coisas em cin , você "tirá-los". O programa a seguir lê dois números do usuário e os adiciona juntos:

#include<iostream> 
 using namespace std; 
 
 int main() 
 { 
  int a, b; // Variables to hold the two numbers. 
 
  cout << "Please enter the first number:" << endl; 
  cin >> a; 
  cout << "Please enter the second number:" << endl; 
  cin >> b; 
 
  cout << "The sum of your numbers is: " << a + b << endl; 
 } 

cin significa "Console Input" e é um fluxo de entrada que representa a entrada do console. Na expressão cin >> a; , os dados são lidos de cin e salvos na variável a , usando o operador >> , o operador de extração 2 . O operador de extração lê exatamente a quantidade de dados necessária para gravar na variável que especificamos e pula qualquer espaço em branco, portanto, se o usuário digitar "6", isso será lido apenas como o valor 6 .

Vale a pena notar que o cin irá parar todo o programa para esperar que o usuário digite seu valor. O programa não continuará até que o usuário tenha pressionado enter e alguns dados serão gravados na variável. Se o usuário apenas pressionar enter sem digitar nada, o cin continuará esperando por um valor.

O operador de extração << pode ser encadeado também. Aqui está o mesmo programa da última vez, mas escrito de uma maneira mais concisa:

#include<iostream> 
 using namespace std; 
 
 int main() 
 { 
  int a, b; // Variables to hold the two numbers. 
 
  cout << "Please enter two numbers:" << endl; 
  cin >> a >> b; 
  cout << "The sum of your numbers is: " << a + b << endl; 
 } 

Quando encadeado, o operador de extração primeiro lerá os dados de cin para preencher a e, em seguida, lerá os dados para preencher b .

As instruções printf e scanf padrão de C também podem ser usadas com o c ++ importando ' ' arquivo de cabeçalho.

Fontes

  1. http://www.cplusplus.com/reference/ostream/ostream/operator%3C%3C/
  2. http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/