Lettura sicura dell'input con getline
Usi std::getline per leggere le righe e convalidi l'input dell'utente prima di utilizzarlo
Lettura sicura dell'input con getline è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.
Perché è importante un input sicuro
L'input dell'utente è la causa più comune di arresti anomali. Un tipo errato, una riga vuota o caratteri imprevisti possono compromettere un programma ingenuo. È essenziale leggere i dati in modo difensivo.
Nozioni di base su std::getline
std::getline(stream, line) legge i caratteri fino alla nuova riga successiva. La nuova riga viene consumata, ma non memorizzata.
std::string line;
std::getline(std::cin, line);Delimitatori personalizzati
Passi un terzo argomento per arrestare la lettura in corrispondenza di qualsiasi carattere, non solo della nuova riga.
std::string field;
std::getline(std::cin, field, ',');Convalida dell'input numerico
Legga prima l'intera riga, quindi la analizzi. In questo modo evita lo stato di errore di cin quando l'input non è valido.
std::string line;
int n;
if (std::getline(std::cin, line)) {
try {
n = std::stoi(line);
} catch (...) {
std::cout << "Invalid number\n";
}
}Ripetizione fino a ottenere un valore valido
Combini getline e try/catch per continuare a richiedere l'input finché l'utente non fornisce un valore valido.
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";
}Rilevamento di EOF in getline
getline imposta lo stream nello stato di errore quando raggiunge EOF. Controlli lo stream dopo la chiamata.
std::string line;
while (std::getline(std::cin, line)) {
process(line);
}Rimozione degli spazi vuoti
Gli utenti spesso inseriscono spazi indesiderati. Li rimuova da entrambe le estremità dopo la lettura.
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);
}Cancellazione dello stream
Se combina >> e getline, elimini prima i caratteri residui.
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');Lettura di più valori per riga
Legga l'intera riga, quindi la passi a uno stringstream ed esegua l'estrazione.
std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
int a, b, c;
iss >> a >> b >> c;Difesa dalla lunghezza massima
Rifiuti subito l'input eccessivamente lungo per prevenire un esaurimento involontario delle risorse.
std::string line;
if (std::getline(std::cin, line) && line.size() > 1024) {
std::cout << "Input too long.\n";
return 1;
}Lettura di password o input nascosto
La libreria standard non nasconde l'input visualizzato. Per le richieste di password, utilizzi API della piattaforma come termios su Unix o SetConsoleMode su Windows.
Verifica rapida
Perché è più sicuro leggere con getline e poi analizzare il testo, invece di utilizzare std::cin >> n?
Riepilogo
Legga l'input dell'utente con std::getline, esegua separatamente la convalida o l'analisi e rimuova gli spazi vuoti. Racchiuda l'analisi in try/catch e ripeta il ciclo finché non ottiene un valore valido. Cancelli lo stato dello stream quando combina l'estrazione con la lettura di righe.
Domande Frequenti
La lezione «Lettura sicura dell'input con getline» è gratuita?
Sì — il testo completo di «Lettura sicura dell'input con getline» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.
Cosa imparerò in «Lettura sicura dell'input con getline»?
Usi std::getline per leggere le righe e convalidi l'input dell'utente prima di utilizzarlo Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C++ Academy?
Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Lettura sicura dell'input con getline»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C++ Academy?
Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Uso corretto di std::cin e std::cout
- Formattazione dell'output con iomanip
- Lettura sicura dell'input con getline
- Utilizzo di std::cerr e std::clog