Search

1.3a — A first look at cout, cin, and endl

std::cout

As noted in previous sections, the std::cout object (in the iostream library) can be used to output text to the console. As a reminder, here’s our Hello world program:

To print more than one thing on the same line, the output operator (<<) can be used multiple times. For example:

This program prints:

x is equal to: 4

What would you expect this program to print?

You might be surprised at the result:

Hi!My name is Alex.

std::endl

If we want to print things to more than one line, we can do that by using std::endl. When used with std::cout, std::endl inserts a newline character (causing the cursor to go to the start of the next line).

For example:

This prints:

Hi!
My name is Alex.

std::cin

std::cin is the opposite of std::cout -- whereas std::cout prints data to the console using the output operator (<<), std::cin reads input from the user at the console using the input operator (>>). Now that you have a basic understanding of variables, we can use std::cin to get input from the user and store it in a variable.

Try compiling this program and running it for yourself. When you run the program, it will print “Enter a number: ” and then wait for you to enter one. Once you enter a number (and press enter), it will print “You entered ” followed by the number you just entered.

For example (I entered 4):

Enter a number: 4
You entered 4

This is an easy way to get input from the user, and we will use it in many of our examples going forward.

If your screen closes immediately after entering a number, please see section 0.7 -- a few common cpp problems for a solution.

(As an interesting side note, if you enter a really big number, the results may surprise you. Try it! This happens because x can only hold numbers up to a certain size. After that, it “overflows”. We’ll discuss overflow in a future section.)

std::cin, std::cout, <<, and >>

New programmers often mix up std::cin, std::cout, << and >>. Here’s an easy way to remember:

  • std::cin and cout always go on the left-hand side of the statement.
  • std::cout is used to output a value (cout = character output)
  • std::cin is used to get an input value (cin = character input)
  • << is used with std::cout, and shows the direction that data is moving from the r-value to the console. std::cout << 4 moves the value of 4 to the console
  • >> is used with std::cin, and shows the direction that data is moving from the console into the variable. std::cin >> x moves the value from the console into x

(Admin note: Discussion of the std::namespace and using statements has been moved to lesson 1.8a -- Naming conflicts and the std namespace)

1.4 -- A first look at functions and return values
Index
1.3 -- A first look at variables, initialization, and assignment

139 comments to 1.3a — A first look at cout, cin, and endl

  • sonia

    hey!this tutorial is really of great help to me as it covered all the basics in the easiest way.

  • shubham

    hye alex this code
    //#include "stdafx.h" // Uncomment this line if using Visual Studio
    #include <iostream>

    int main()
    {
        std::cout << "Enter a number: "; // ask user for a number
        int x; // no need to initialize x since we’re going to overwrite that value on the very next line
        std::cin >> x; // read number from console and store it in x
        std::cout << "You entered " << x << std::endl;
        return 0;
    }
    is showing submission limit reached in codechef ide.

  • Daniel

    What is the advantage to using std::cout instead of placing ‘using namespace std;’ after the include statements and just using ‘cout’ ‘cin’ ‘endl’ etc…?

    • dolx

      I’ve heard that using the standard namespace (using namespace std) is bad practice because it can cause syntax related errors. I guess you could google that though.

      • Daniel

        Thanks for the reply. I looked it up and found this answer on stackoverflow: https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice

    • Alex

      There’s less chance for naming collisions. I talk a lot more about using statements (and why to avoid them) in chapter 4.

  • Anonymous

    Hey Alex, novice programmer here, why wouldn’t you just utilize \n within the string to gain begin a new line? As opposed to std::endl?

    Also, great tutorial.

    • MikeL

      On different operating systems, a new line might consist of something other than ‘\n’. By using the library definition for the OS you are building on, you are guaranteed that it will be correct. In addition, using appropriately named variables makes programs more readable. 😉

    • nascardriver

      std::endl flushes the output buffer (The text will be displayed immediately) whereas ‘\n’ does not and the text might take a moment until it’s printed to the console.
      ‘\n’ is useful when you want to print multiple lines at the same time, you’ll have ‘\n’ in every but the last line and only the last line will use std::endl, because std::endl is slower than ‘\n’.

  • Abdo

    Hello Alex. I’ve been playing around with what I know from this tutorial so far, and surprisingly there’s never ending ways to practice what I know despite that I’m still this early in the tutorial. One thing i noticed about std::cin is that it ignores everything after a space. so if in the console the user inputs:

    How was your day? :awesome and cool

    And then i print the variable in which I stored the input in, i get only:

    awesome

    and it ignores the rest of the input. Do you know if it’s possible to get around this somehow while still using std::cin. And if not then is there something else that can replace std::cin that doesn’t ignore spaces?

Leave a Comment

Put C++ code inside [code][/code] tags to use the syntax highlighter