getline() 即使在 clear() 之后也会先跳过
所以我有一个函数可以不断跳过第一个 getline 并直接跳到第二个 getline.我试图清除缓冲区但仍然没有运气,这是怎么回事?
So I have a function that keeps skipping over the first getline and straight to the second one. I tried to clear the buffer but still no luck, what's going on?
void getData(char* strA, char* strB)
{
cout << "Enter String 1: "; // Shows this line
cin.clear();
cin.getline(strA, 50); // 50 is the character limit, Skipping Input
cout << endl << "Enter String 2: "; // Showing This Line
cin.clear();
cin.getline(strB, 50); // Jumps Straight to this line
}
推荐答案
确保你没有使用 cin >>字符串
.在调用函数之前.如果你使用 cin >>str
然后要使用getline(cin, str)
,必须先调用cin.ignore()
.
Make sure you didn't use cin >> str
. before calling the function. If you use cin >> str
and then want to use getline(cin, str)
, you must call cin.ignore()
before.
string str;
cin >> str;
cin.ignore(); // ignores
that cin >> str has lefted (if user pressed enter key)
getline(cin, str);
如果使用 c 字符串:
In case of using c-strings:
char buff[50];
cin.get(buff, 50, ' ');
cin.ignore();
cin.getline(buff, 50);
添加:你的错误可能不在函数本身,而是在调用函数之前.cin
流必须在第一个 cin.getline
中仅读取换行符
'
.
ADD: Your wrong is not probably in the function itself, but rather before calling the function. The stream cin
have to read only a new line character
'
in first cin.getline
.
相关文章