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


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.


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:

My name is Alex.


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
1.3 -- A first look at variables, initialization, and assignment

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

  • brunda

    why we have to use "stdafx.h"

  • PatrickC808

    Hi Alex,

    Very helpful tutorials and very good at easing me into the world of c++. i have been having an issue that i hope you can solve, i have the ‘hello world’ program written up, it says the build succeeded, but the console command box never shows up saying hello. I’ve tried a lot of fixes, its not that the box appears and quickly closes after running the program, it never runs the program. I decided to continue reading and gave the std::cin tutorial a try. Unfortunately, i never get the chance to enter a number for the program to receive, resulting in Visual Studio telling me it succeeded, when nothing has happened. I’m a noob so i apologize if this is an easy fix and beneath you. please help ?

    • Alex

      It may be obvious, but are you actually running your program after compiling it?

      If so, then try temporarily disabling your virus scanner or malware detector, and see if that fixes it. Sometimes these interfere with things they shouldn’t.

  • Cosmin

    Hello! I have a question: what is the default type cout prints? For example:

    I wonder if the type of the argument cout takes affects the value printed. For example, in the first case, I printed an int, but the value was too high and therefore, it overflowed. In the second case, it is the same value, but LL converted it to a long long, and cout printed correctly.

    • nascardriver

      Hi Cosmin!

      This has nothing to do with std::cout. The compiler will decide what type the number is before it gets passed to std::cout. std::cout only prints whatever is passed to it.
      Your compiler decided to make 1 an int and the 9th a long long. You explicitly stated that the other 1 is a long long so there’s nothing for the compiler to do about it.

      The bitshift operator doesn’t affect the type.

      Here’s an example of what gcc 5.4.1 did


      As you see, here the 9th are a long, not a long long.

  • 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:

    • 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:


    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