问题
I'm creating a simple console application in C++ that gets string and char inputs from the user. To make things simple, I would like to use the string and char data types to pass input from cin to.
To get string inputs, I'm using the getline method:
string var;
cin.ignore(); //I used ignore() because it prevents skipping a line after using cin >> var
getline(cin, var);
To get char inputs, I'm using the cin >> var method:
char var;
cin >> var;
This works fine for the most part. However, when I enter a string using getline, it ignores the first character of my string.
Is it possible to use getline and cin >> without having to use ignore, or a method I can call to ensure that my first character isn't skipped?
This is a full sample of code where I use both getline and cin >>:
string firstName;
string lastName;
char gender = 'A';
cout << "First Name: ";
cin.ignore();
getline(cin, firstName);
cout << "Last Name: ";
cin.ignore();
getline(cin, lastName);
while(genderChar != 'M' && genderChar != 'F')
{
cout << "Gender (M/F): ";
cin >> genderChar;
genderChar = toupper(genderChar);
}
回答1:
cin>>var;
only grabs the var
from the buffer, it leaves the \n
in the buffer,
which is then immediately grabbed up by the getline
So, following is just fine, (if I understood correctly your problem)
cin>>var;
cin.ignore(); //Skip trailing '\n'
getline(cin, var);
As per your edited post
You don't have to use cin.ignore();
for geline
This extracts characters from buffer and stores them into firstName
or (lastName
) until the delimitation character here -newline ('\n'
).
回答2:
ignore()
does not skip a line, it skips a character. Could you send example code and elaborate on the need for cin.ignore()
?
回答3:
std::cin.ignore()
will ignore the first character of your input.
For your case, use std::cin.ignore()
after std::cin
and then getline()
to ignore newline character as:
cin>>ch;
cin.ignore(); //to skip the newline character in the buffer
getline(cin,var);
回答4:
You are using std::isstream::ignore()
before std::getline()
. std::cin.ignore()
will extract the first character from the input sequence and discard that.
http://www.cplusplus.com/reference/istream/istream/ignore/
来源:https://stackoverflow.com/questions/18348350/c-iostream-using-cin-var-and-getlinecin-var-input-errors