User Input in the Terminal

This lesson introduces the fundamentals of capturing user input, using std::cin and std::getline
This lesson is part of the course:

Intro to C++ Programming

Become a software engineer with C++. Starting from the basics, we guide you step by step along the way

Free, Unlimited Access
3D Character Concept Art
Ryan McCombe
Ryan McCombe
Edited

So far, our programs have been completely non-interactive. Let's see how we can get input from our users, letting them control how our software runs.

Using std::cin and std::getline

Just like std::cout is a stream of output, std::cin is a stream of input from our user. Just like std::cout, it is also available within the <iostream> header

There are numerous ways to interact with std::cin. The most straightforward is using std::getline to get a line of text from our users.

std::getline is part of <string> and accepts two arguments:

  • The input stream, representing where the data is coming from. To let the user input text in the terminal, we’d use std::cin for this.
  • A reference to a std::string, which will be populated with what the user entered.

Below, we show this in action:

#include <iostream>
#include <string>

int main() {
  std::string UserInput;

  std::cout << "Enter some text: ";
  std::getline(std::cin, UserInput);
  std::cout << "You entered: " << UserInput;
}

Now, our program will pause at the std::getline call, and wait for user input. Typing something on our keyboard and hitting return will yield output like the following:

Enter some text: Hello!
You entered: Hello!

A Practical Example

Let's see a bigger example of this. The following code lets our users pick what type of Character they want to play as:

#include <iostream>
#include <string>

class Character {
public:
  Character(const std::string& ClassName)
	: ClassName { ClassName } {
  }
  void SetName(const std::string& NewName) {
	Name = NewName;
  }
  std::string Name;
  std::string ClassName;
};

class Warrior : public Character {
public:
  Warrior() : Character("Warrior") {}
};

class Rogue : public Character {
public:
  Rogue() : Character("Rogue") {}
};

class Wizard : public Character {
public:
  Wizard() : Character("Wizard") {}
};

std::string SelectClass() {
  std::cout << "What class do you want to play?"
    << "\n- Enter 1 for Warrior"
    << "\n- Enter 2 for Rogue"
    << "\n- Enter 3 for Wizard"
    << "\n\nMake your selection: ";

  std::string ClassString;
  std::getline(std::cin, ClassString);
  return ClassString;
}

std:: string SelectName() {
  std::cout << "Enter your name: ";

  std::string Name;
  std::getline(std::cin, Name);
  return Name;
}

int main() {
  Character* PlayerCharacter;
  Warrior PlayerWarrior;
  Rogue PlayerRogue;
  Wizard PlayerWizard;

  std::string SelectedClass{SelectClass()};
  if (SelectedClass == "1") {
	  PlayerCharacter = &PlayerWarrior;
  } else if (SelectedClass == "2") {
	  PlayerCharacter = &PlayerRogue;
  } else {
	  PlayerCharacter = &PlayerWizard;
  }

  PlayerCharacter->SetName(SelectName());

  std::cout
    << PlayerCharacter->Name << " the "
    << PlayerCharacter->ClassName
    << " is entering the arena!";
}

After running this code, and providing the requested input, we might see something like this:

What class do you want to play?
- Enter 1 for Warrior
- Enter 2 for Rogue
- Enter 3 for Wizard

Make your selection: 2
Enter your name: Grifter
Grifter the Rogue is entering the arena!

Summary

In this lesson, we explored the basics of obtaining user input in C++ using std::cin and std::getline. Through practical examples, we learned how to make our programs interactive and responsive to user commands.

Preview of the Next Lesson

In our next lesson, we will delve into the world of arrays using std::vector. The key topics we’ll cover include:

  • Introduction to Arrays: Understanding arrays as a fundamental concept in programming, where they serve as a way to store collections of items (like numbers, objects, etc.) in an ordered manner
  • Introduction to std::vector: Introducing std::vector as an implementation of a dynamic array, and the difference between dynamic and static arrays.
  • Creating and Initializing a std::vector: Learn how to declare std::vector, initialize it with values, and understand its dynamic nature.
  • Accessing Elements: Methods to access and modify elements in a std::vector, including using the subscript operator.
  • Iterating over std::vector: How to iterate through std::vector using various methods, including range-based for loops.
  • Practical Examples and Applications: Real-world scenarios and code examples to solidify the understanding of std::vector.

Was this lesson useful?

Edit History

  • Refreshed Content

  • First Published

Ryan McCombe
Ryan McCombe
Edited
Lesson Contents

User Input in the Terminal

This lesson introduces the fundamentals of capturing user input, using std::cin and std::getline

3D art showing a progammer setting up a development environment
This lesson is part of the course:

Intro to C++ Programming

Become a software engineer with C++. Starting from the basics, we guide you step by step along the way

Free, Unlimited Access
Odds and Ends
3D art showing a progammer setting up a development environment
This lesson is part of the course:

Intro to C++ Programming

Become a software engineer with C++. Starting from the basics, we guide you step by step along the way

Free, unlimited access

This course includes:

  • 56 Lessons
  • Over 200 Quiz Questions
  • Capstone Project
  • Regularly Updated
  • Help and FAQ
Next Lesson

Dynamic Arrays using std::vector

Explore the fundamentals of dynamic arrays with an introduction to std::vector
3D Character Concept Art
Contact|Privacy Policy|Terms of Use
Copyright © 2024 - All Rights Reserved