这是一个代码片段。我对内部缓冲的工作方式感到困惑。
while(true)
{
cout << "Enter a character: ";
cin.ignore(3, '\n');
ch = cin.get(); // ch is char type
cout << "char: ch: " << ch << endl;
}
实际上cin.ignore(3, '\n')
忽略了前三个字符,然后获取下一个直接字符。到那时还好。因为,我把它保持在一个while
循环中,所以我试图检查ignore()
and的行为get()
。例如,我检查的输出是
Enter a character: abcd
char: ch: d
Enter a character: efgh
char: ch: e
Enter a character: ijkl
char: ch: i
Enter a character: mnopq
char: ch: m
Enter a character: char: ch: q
Enter a character:
只是为了检查缓冲,我故意给了 4 个字符而不是 1。在第一种情况下,它很好并且得到了它。从第二个开始,忽略似乎不起作用。当我输入 5 个字符时,我没有得到这种行为。
需要对此进行解释。:)