C++ I/O Básico
Entrada e saída com iostream
Em C++, a entrada e saída padrão são feitas com os fluxos std::cin e std::cout, definidos no cabeçalho <iostream>. O operador << insere dados no fluxo de saída, enquanto >> extrai dados do fluxo de entrada. Por padrão, cin e cout são sincronizados com as funções C (scanf/printf), mas você pode desativar essa sincronia para melhorar o desempenho.
A leitura com >> para no primeiro caractere de espaço em branco, o que pode ser um problema ao ler strings com espaços. Para ler uma linha inteira, incluindo espaços, usa-se std::getline. É importante lembrar que getline não descarta o caractere de nova linha deixado por leituras anteriores, então muitas vezes é necessário consumi-lo antes.
Os manipuladores de fluxo, como std::endl, std::fixed, std::setprecision e std::setw, permitem controlar a formatação da saída. Eles são definidos em <iomanip> (exceto endl). A partir do C++20, std::format oferece uma alternativa moderna e segura para formatação de strings, similar ao printf, mas com verificação de tipos em tempo de compilação.
Neste card, você verá exemplos práticos de como usar cout, cin, getline, manipuladores e std::format para realizar entrada e saída de dados de forma idiomática e eficiente.
Pontos-chave
std::coutestd::cinsão os fluxos padrão de saída e entrada, definidos em<iostream>.- Use
std::getline(std::cin, linha)para ler uma linha inteira, incluindo espaços. - Manipuladores como
std::fixed,std::setprecisionestd::setwcontrolam a formatação da saída. std::format(C++20) permite criar strings formatadas de forma segura e expressiva.- Após ler com
>>, pode ser necessário limpar o buffer comstd::cin.ignore()antes de usargetline.
#include <iostream>
#include <iomanip>
#include <string>
#include <format>
int main() {
// Saída simples com cout
std::cout << "Digite seu nome completo: ";
std::string nome;
std::getline(std::cin, nome); // lê a linha inteira, incluindo espaços
// Entrada de número inteiro
std::cout << "Digite sua idade: ";
int idade;
std::cin >> idade;
// Limpa o buffer para remover o '\n' deixado pelo cin >>
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
// Entrada de texto com getline após o ignore
std::cout << "Digite sua cidade: ";
std::string cidade;
std::getline(std::cin, cidade);
// Formatação com manipuladores
std::cout << std::fixed << std::setprecision(2);
double altura;
std::cout << "Digite sua altura (m): ";
std::cin >> altura;
// Usando std::format para montar a mensagem final
std::string mensagem = std::format("Olá, {}! Você tem {} anos, mora em {} e mede {:.2f} m.",
nome, idade, cidade, altura);
std::cout << mensagem << std::endl;
return 0;
}