Introdução a C++ - Entrada e Saída
Editado por: Vinicius Okada, Gabriel R
Conteúdo
Linguagem Interpretada Vs Linguagem Compilada
Estrutura básica e compilação
#include <iostream>
using namespace std;
int main() {
// seu código aqui
return 0;
}
e as flags que vamos sempre usar para compilar o código:
g++ hello.cpp -o hello -std=c++17 -O2 -Wall
Explicando o comando:
g++é o compiladorhello.cppo arquivo de entrada-o helloEscolhermos o output (saída executável)-std=c++17Escolhe a versão 17 do C++-O2Ativa otimização padrão-WallHabilita um conjunto de avisos essenciais.
Variáveis
Variáveis em C++ funcionam um pouco diferente do Python que muitos estão acostumados. Diferente do Python onde podemos a usar uma variável, em C++ é preciso declarar elas com seu tipo.
// Declaração deve ser:
tipo nome_variavel;
// ou
tipo nome_variavel = valor;
| Tipo | Descrição | Exemplos |
|---|---|---|
| int | Número inteiro | 3, 41, -12 |
| double | Número decimal | 0.5, -6.7, 12.5 |
| char | Um caractere | ’a’, ’Z’, ’8’ |
| string | Texto | ”Hello World!” |
| bool | Verdadeiro/falso | true, false |
Entrada e Saída
Por meio da Entrada e Saída, conseguimos produzir programar interativos.
O C++ possui a biblioteca iostream que permite realizarmos o manejo da Entrada e Saída por meio de “streams” utilizando os objetos cin e cout. Essa forma de trabalhar com Entrada e Saída é simples quando comparada à biblioteca stdio do seu parente C além de ser até mais eficiente em grande parte dos casos.
Como funciona?
cout << "Programação Competitiva - UEM" << endl;
// Saída: Programação Competitiva - UEM
cout << "Testando" << 1 << 2 << 3 << endl;
// Saída: Testando123
cout << "Testando " << 3 << " " << 2 << " " << 1 << endl;
// Saída: Testando 3 2 1
O cout funciona como saída padrão, as constantes e variáveis que forem colocadas no fluxo serão impressas na tela na mesma ordem que foram inseridas.
O operador de inserção << serve justamente para “enviar” para o cout o que desejamos imprimir.
O endl serve como quebra de linha com comportamento parecido com o \n (as diferenças estão no último tópico do material)
int ano = 2026;
string professor = "Kikuti";
cout << "O projeto surgiu em " << ano << " e é orientado pelo professor " << professor << endl;
// Saída: O projeto surgiu em 2026 e é orientado pelo professor Kikuti
E da mesmo forma que temos o cout para saída, temos o cin para entrada de dados:
string meu_nome;
cin >> meu_nome;
cout << "Meu nome é: " << meu_nome << endl;
int idade;
double altura;
cin >> idade >> altura;
cout << "Tenho " << idade << " anos e " << altura "m de altura" << endl;
Repare 2 coisas:
- O operador de extração é
>>, o contrário do de inserção (<<) - As variáveis sempre são declaradas com seu tipo
Formatando a saída
Usando o fixed e o setprecision(n) da biblioteca iomanip conseguimos controlar as casas decimais da saída.
#include <iomanip>
double pi = 3.14159;
cout << fixed << setprecision(2) << pi << endl;
// saida: 3.14
#include <iomanip>
double euler = 2.71828;
cout << fixed << setprecision(4) << euler << endl;
// saida: 3.7182
Detalhe Importante: é possível usar várias vezes a entrada e saída:
#include <iostream>
using namespace std;
int main() {
int a, b;
cout << "Digite o valor de a: ";
cin >> a;
cout << "Digite o valor de b: ";
cin >> b;
cout << "A soma de a + b é igual a: " << a + b << endl;
return 0;
}
// Exemplo:
// Digite o valor de a: 12
// Digite o valor de b: 32
// A soma de a + b é igual a: 44
Conteúdo Adicional
A linha mágica de performance:
ios_base::sync_with_stdio(false);
cin.tie(NULL);
Sempre colocar no inicio da função main.
#include <iostream>
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// Todo o restante do código
// ...
//
// ...
return 0;
}
Explicação
ios_base::sync_with_stdio(false);
desliga a sincronização entre as funções de entrada e saída do C e C++, aumentando muito mais o desempenho dessas funções.
Portanto sempre que utilizar essa linha, escolher apenas as funções de E/S de apenas um sistema, ou C (scanf/printf) ou C++ (cin/cout)
cin.tie(NULL);
Remove a ligação entre cin e cout.
Por padrão o cin é “amarrado” ao cout
Antes de qualquer leitura com ocin,o cout é automaticamente descarregado (flush)
Esse flush automático custa desempenho.
Consequência IMPORTANTE
Mensagens podem não aparecer no antes do cin
Exemplo:
cout << "Digite um numero: ";
cin >> x;
A mensagem pode acabar atrasando, ou até não aparecendo em algumas máquinas
Portanto quando utilizar esse comando, sempre dar um flush na memória
cout << "Digite um numero: " << flush;
cin >> x;
Ou também
cout << "Digite um numero: " << endl;
cin >> x
Diferença entre "\n" e endl
O ‘\n’ é apenas um caractere de nova linha, como em várias outras linguagens
O *endl*também também quebra linha, porém ele tem uma funcionalidade adicional → Força o *cout*a descarregar o buffer de imediato (flush)
Visualmente são iguais.
Buffer (Memória)
O cout não escreve na tela caractere por caractere imediatamente.
- Guarda temporariamente na memória (buffer)
- Envia tudo junto
Quando usar endl:
Quando você precisa garantir que a saída apareceu imediatamente no terminal.
Exemplo:
cout << "Digite um número: " << endl;
Neste caso é necessário garantir que a mensagem saiu antes do cin
Casos de uso:
- quando precisa de flush imediato
- programas interativos
- logs importantes
- debugging
Quando usar “\n” :
Em todos os outros casos que não precisar de um flush na memória.
Exemplo:
for(int i = 0; i < 1000000; i++) {
cout << i << '\n';
}
Neste caso se usassemos endl forçariamos 1 milhão de flushes no buffer (flush desnecessário causa Time Limit Exceed(TLE))
Casos de uso:
- saídas normais
- loops
- competição
- algoritmos
- impressão massiva
Simplificando
| Característica | \n |
endl |
|---|---|---|
| Quebra linha | Sim | Sim |
| Faz flush | Não | Sim |
| Mais rápido | Sim | Não |
| Uso recomendado | Maioria dos casos | Quando precisa flush |
Exercícios
Exercícios de 1001-1010 do beecrowd
Torneio:
Exercícios Separados:
Dica: Se atente com a formatação e espaços
Dica: Revise o conteúdo e entenda o fixed & setprecision
Dica: preste atenção nas entradas que importam para resolver o problema
As dicas servem para todos os exercícios!
Slides
