C++ Academy · Lesson

Reading Input Safely with getline

Use std::getline for line input and validate user input before using it.

Lesson 3 of 413 steps

Reading Input Safely with getline is a free C++ Academy lesson on CoddyKit. This is lesson 3 of 4. Any 3 lessons of this learning path are free to read in full — after that, CoddyKit PRO unlocks every lesson, plus hands-on practice with a built-in code editor and a 24/7 AI tutor. It is part of the C++ Academy learning path, and your progress syncs across the web and the CoddyKit app. The C++ Academy course includes 4 lessons in total.

Why Safe Input Matters

User input is the most common source of crashes. A wrong type, an empty line, or unexpected characters can all break a naive program. Defensive reading is essential.

std::getline Basics

std::getline(stream, line) reads characters until the next newline. The newline is consumed but not stored.

std::string line;
std::getline(std::cin, line);

Custom Delimiters

Pass a third argument to stop at any character — not just newline.

std::string field;
std::getline(std::cin, field, ',');

Validating Numeric Input

Read the whole line first, then parse. This avoids the cin failure state when input is malformed.

std::string line;
int n;
if (std::getline(std::cin, line)) {
    try {
        n = std::stoi(line);
    } catch (...) {
        std::cout << "Invalid number\n";
    }
}

Looping Until Valid

Combine getline and try/catch to keep prompting until the user supplies valid input.

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";
}

Detecting EOF in getline

getline sets the stream to fail state on EOF. Check the stream after the call.

std::string line;
while (std::getline(std::cin, line)) {
    process(line);
}

Trimming Whitespace

Users often add stray spaces. Trim both ends after reading.

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);
}

Clearing the Stream

If you mix >> and getline, clear leftover characters first.

std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

Reading Multiple Values per Line

Read the whole line, then feed it into a stringstream and extract.

std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
int a, b, c;
iss >> a >> b >> c;

Maximum Length Defense

Reject overlong input early to prevent unintentional resource exhaustion.

std::string line;
if (std::getline(std::cin, line) && line.size() > 1024) {
    std::cout << "Input too long.\n";
    return 1;
}

Reading Passwords or Hidden Input

The standard library does not hide echoed input. Use platform APIs like termios on Unix or SetConsoleMode on Windows for password prompts.

Quick Check

Why is it safer to read with getline and then parse, instead of std::cin >> n?

Recap

Read user input with std::getline, validate or parse separately, and trim whitespace. Wrap parsing in try/catch and loop until you get a valid value. Clear the stream when mixing extraction and line reading.

Free to start

Learn C++ with an AI tutor — free

Write and run real code in your browser, get instant help from a 24/7 AI tutor, and pick up where you left off on the web or in the app.

Courses
51
Lessons
203

Frequently Asked Questions

Is the “Reading Input Safely with getline” lesson free?

Yes — any 3 lessons of the C++ Academy learning path, including “Reading Input Safely with getline”, are free to read in full here on the web. After that, CoddyKit PRO unlocks every lesson, plus interactive practice with a built-in code editor and a 24/7 AI tutor. The C++ Academy course includes 4 lessons in total.

What will I learn in “Reading Input Safely with getline”?

Use std::getline for line input and validate user input before using it. You practise C++ Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.

Do I need any experience to start C++ Academy?

No prior experience is required. C++ Academy on CoddyKit is structured for beginners through advanced learners, so you can start here or from the beginning and move at your own pace. This is lesson 3 of 4.

How long does the “Reading Input Safely with getline” lesson take?

Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.

Can I write and run code in this C++ Academy lesson?

Yes. Every C++ Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.

All lessons in this course

  1. Using std::cin and std::cout Properly
  2. Formatting Output with iomanip
  3. Reading Input Safely with getline
  4. Working with std::cerr and std::clog
← Back to C++ Academy