所以我有一个不断跳过第一个getline并直接跳到第二个getline的函数。我试图清除缓冲区,但仍然没有运气,发生了什么?
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
}
答案 0 :(得分:13)
确保您没有使用cin >> str
。在调用函数之前。如果您使用cin >> str
,然后想要使用getline(cin, str)
,则必须先致电cin.ignore()
。
string str;
cin >> str;
cin.ignore(); // ignores \n that cin >> str has lefted (if user pressed enter key)
getline(cin, str);
如果使用c-strings:
char buff[50];
cin.get(buff, 50, ' ');
cin.ignore();
cin.getline(buff, 50);
ADD :您的错误可能不在函数本身,而是在调用函数之前。流cin
必须在第一个\n'
中只读取换行符cin.getline
。
答案 1 :(得分:1)
cin.clear();
清除流上的任何错误位 - 它不会消耗任何可能待处理的数据。
您希望使用cin.ignore()
来使用流中的数据。
答案 2 :(得分:0)
读完之后,bufor中仍然有“RETURN”字符,因此每次阅读后都必须cin.ignore()
。
您还可以使用cin.sync()
清除信息流。
Actualy clear方法只清除标记。
还有一个选项,你可以到流的末尾,没有任何东西可以读,你应该没有问题写。
std::cin.seekg(0, std::ios::end);
由你决定使用什么。
答案 3 :(得分:0)
使用cin.ignore(-1);
它不会删除输入字符串的第一个字符
答案 4 :(得分:0)
在使用 get 行进行更大的输入后,cin 会导致错误。所以在getline之后使用这段代码返回输入队列和下降位正常。
cin.getline(a,5);
while(getchar()!='\n');
cin.clear();
运行一个 while 循环以从队列中删除所有字符 cin.ignore() 导致进一步输入的问题和 cin.clear() 只是重置fallbit