【发布时间】:2021-06-12 08:42:26
【问题描述】:
我知道 cin.getline() 函数不会清理缓冲区,例如在程序下面的代码中跳过第 4 行:
char name[10];
char id[10];
std::cin >> name;
std::cin.getline(id,10);
std::cout << name << std::endl;
std::cout << id << std::endl;
输出(如果我输入“Meysam”作为名称变量):
Meysam
所以因为 cin.getline() 没有清理缓冲区,所以我们不能输入 id 变量,但是如果我们使用两个 cin.getline() 如下所示,我们可以输入名称和 id 变量。
char name[10];
char id[10];
std::cin.getline(name,10,'\n');
std::cin.getline(id,10,'\n');
std::cout << name << std::endl;
std::cout << id << std::endl;
这是输出(我们输入 Meysam 和 12345 作为名称和 ID):
Meysam
12345
但这是为什么呢? 我的意思是因为 cin.getline() 没有清理缓冲区,我们应该能够输入 name 变量,但是程序应该跳过下一个用于 id 的 cin.getline(),因为缓冲区已经被填充以前的 cin.getline().NO? 我想知道我没有正确理解的地方 谢谢。
【问题讨论】: