Leitura segura de entradas com getline
Use std::getline para ler linhas e valide a entrada do utilizador antes de a utilizar
Leitura segura de entradas com getline é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Por que a entrada segura é importante
A entrada do usuário é a fonte mais comum de falhas. Um tipo incorreto, uma linha vazia ou caracteres inesperados podem interromper um programa ingênuo. A leitura defensiva é essencial.
Noções básicas de std::getline
std::getline(stream, line) lê caracteres até a próxima quebra de linha. A quebra de linha é consumida, mas não é armazenada.
std::string line;
std::getline(std::cin, line);Delimitadores personalizados
Passe um terceiro argumento para parar em qualquer caractere — não apenas em uma quebra de linha.
std::string field;
std::getline(std::cin, field, ',');Validando a entrada numérica
Leia a linha inteira primeiro e depois faça a análise. Isso evita o estado de falha de cin quando a entrada está malformada.
std::string line;
int n;
if (std::getline(std::cin, line)) {
try {
n = std::stoi(line);
} catch (...) {
std::cout << "Invalid number\n";
}
}Repetindo até obter um valor válido
Combine getline com try/catch para continuar solicitando a entrada até que o usuário forneça um valor válido.
int age;
while (true) {
std::cout << "Age: ";
std::string line;
std::getline(std::cin, line);
try {
age = std::stoi(line);
if (age >= 0 && age < 150) break;
} catch (...) {}
std::cout << "Try again.\n";
}Detectando EOF em getline
getline coloca o fluxo em estado de falha ao encontrar EOF. Verifique o fluxo após a chamada.
std::string line;
while (std::getline(std::cin, line)) {
process(line);
}Removendo espaços em branco
Os usuários costumam adicionar espaços indesejados. Remova os espaços das duas extremidades após a leitura.
void trim(std::string& s) {
size_t start = s.find_first_not_of(" \t\r\n");
size_t end = s.find_last_not_of(" \t\r\n");
s = (start == std::string::npos) ? "" : s.substr(start, end - start + 1);
}Limpando o fluxo
Se combinar >> e getline, limpe primeiro os caracteres restantes.
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');Lendo vários valores por linha
Leia a linha inteira, passe-a para um stringstream e faça a extração.
std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
int a, b, c;
iss >> a >> b >> c;Defesa contra comprimento máximo
Rejeite entradas longas demais antecipadamente para evitar o esgotamento não intencional de recursos.
std::string line;
if (std::getline(std::cin, line) && line.size() > 1024) {
std::cout << "Input too long.\n";
return 1;
}Lendo senhas ou entradas ocultas
A biblioteca padrão não oculta a entrada exibida. Use APIs da plataforma, como termios no Unix ou SetConsoleMode no Windows, para solicitações de senha.
Verificação rápida
Por que é mais seguro ler com getline e depois analisar, em vez de usar std::cin >> n?
Recapitulação
Leia a entrada do usuário com std::getline, valide ou analise separadamente e remova os espaços em branco. Envolva a análise em try/catch e repita até obter um valor válido. Limpe o fluxo ao combinar extração e leitura de linhas.
Perguntas Frequentes
A aula “Leitura segura de entradas com getline” é grátis?
Sim — o texto completo de “Leitura segura de entradas com getline” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Leitura segura de entradas com getline”?
Use std::getline para ler linhas e valide a entrada do utilizador antes de a utilizar Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Leitura segura de entradas com getline”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Usando std::cin e std::cout corretamente
- Formatando a saída com iomanip
- Leitura segura de entradas com getline
- Trabalhar com std::cerr e std::clog