std::cin:: and why a newline remains

c++, cin, newline

Solution

Because that's its default behavior, but you can change it. Try this:

#include<iostream>
using namespace std;

int main(int argc, char * argv[]) {
  char y, z;
  cin >> y;
  cin >> noskipws >> z;

  cout << "y->" << y << "<-" << endl;
  cout << "z->" << z << "<-" << endl;
}

Feeding it a file consisting of a single character and a newline ("a\n"), the output is:

y->a<-
z->
<-

Problem

Reference Why is the Console Closing after I've included cin.get()? I was utilizing `std::cin.get()` ``` #include<iostream> char decision = ' '; bool wrong = true; while (wrong) { std::cout << "\n(I)nteractive or (B)atch Session?: "; if(std::cin) { decision = std::cin.get(); if(std::cin.eof()) throw CustomException("Error occurred while reading input\n"); } else { throw CustomException("Error occurred while reading input\n"); } decision = std::tolower(decision); if (decision != 'i' && decision != 'b') std::cout << "\nPlease enter an 'I' or 'B'\n"; else wrong = false; } ``` I read basic_istream::sentry and std::cin::get. I chose instead to use `std::getline` as the while loop is executing twice because the stream is not empty. ``` std::string line; std::getline(std::cin, line); ``` As the reference I posted above states within one of the answers, `std::cin` is utilized to read a character and `std::cin::get` is utilized to remove the newline `\n`. ``` char x; std::cin >> x; std::cin.get(); ``` My question is why does `std::cin` leave a newline `\n` on the stream?

Original source

Related problems