Introdução a C++ - Entrada e Saída

Editado por: Vinicius Okada, Gabriel R

Conteúdo

Linguagem Interpretada Vs Linguagem Compilada

Por que C++?

G++

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 compilador
  • hello.cpp o arquivo de entrada
  • -o hello Escolhermos o output (saída executável)
  • -std=c++17 Escolhe a versão 17 do C++
  • -O2 Ativa otimização padrão
  • -Wall Habilita 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:

  1. O operador de extração é >>, o contrário do de inserção (<<)
  2. 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:

1001 - Extremamente Básico

Dica: Se atente com a formatação e espaços

1002 - Área do Círculo

Dica: Revise o conteúdo e entenda o fixed & setprecision

1003 - Soma Simples

1004 - Produto Simples

1005 - Média 1

1006 - Média 2

1007 - Diferença

1008 - Salário

1009 - Salário com Bônus

Dica: preste atenção nas entradas que importam para resolver o problema

1010 - Cálculo Simples

As dicas servem para todos os exercícios!

Slides

https://embed.figma.com/slides/Ebbgj5nF2uJw4PerHC8F0z/Aula-01---Trainee?t=NSXTaQpUO3y9NU9i-6&embed-host=notion&footer=false&theme=system