C++ getline()即使在clear()之后也会先跳过

C++ getline()即使在clear()之后也会先跳过,c++,arrays,char,buffer,getline,C++,Arrays,Char,Buffer,Getline,所以我有一个函数,它不断跳过第一个getline,直接跳到第二个getline。我试图清除缓冲区,但仍然没有运气,发生了什么事 void getData(char* strA, char* strB) { cout << "Enter String 1: "; // Shows this line cin.clear(); cin.getline(strA, 50); // 50 is the

所以我有一个函数,它不断跳过第一个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
}
void getData(char*strA,char*strB)
{

在调用函数之前,请确保没有使用
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字符串:

char buff[50];
cin.get(buff, 50, ' ');
cin.ignore();
cin.getline(buff, 50);

ADD:您的错误可能不在函数本身,而是在调用函数之前。流
cin
必须首先在
cin.getline
中读取一个新行字符
\n'
,在读取某些内容后,bufor中仍然有“RETURN”字符,因此您必须
cin.ignore()
每次读取后

您还可以使用
cin.sync()
清除流。 实际清除方法仅清除标志

还有一个选项是,您可以转到流的末尾,没有任何内容可以阅读,您应该毫无问题地编写

std::cin.seekg(0, std::ios::end);
您将使用什么取决于您。

cin.clear();
清除流中的任何错误位-它不会消耗任何可能挂起的数据


您希望使用
cin.ignore()
来使用流中的数据。

使用
cin.ignore(-1);
它不会删除输入字符串的第一个字符。

在使用get行进行较大的输入后,cin会导致错误。因此,在getline之后使用此代码将返回输入队列并使位恢复正常

cin.getline(a,5);
    while(getchar()!='\n');
    cin.clear();
运行while循环以从队列中删除所有字符 cin.ignore()导致进一步输入和
cin.clear()只是重置错误位

您的控制台宽度是否小于50个字符?我想默认值是80个字符