📅  最后修改于: 2023-12-03 15:30:00.035000             🧑  作者: Mango
在C++中,我们通常使用 cin
来从标准输入中读取数据。但有一种情况会使得 cin
无法按我们期望的方式工作,这就是与 getline()
一起使用。本文将介绍这个问题及其解决方案。
假设我们需要先使用 cin
读取一个整数,然后再使用 getline()
读取一行字符串。代码如下:
int num;
string str;
cin >> num;
getline(cin, str);
然而,当运行程序时,我们会发现 getline()
并没有等待我们输入字符串就直接过去了。这是为什么呢?
这是因为 cin
在读取完整数后,通常会将换行符留在输入流中,而 getline()
会认为这个换行符是一个空行,因此会直接跳过等待我们输入字符串。
为了解决这个问题,我们需要在读取完整数后清空输入流中的换行符。我们可以在读取整数后使用 cin.ignore()
来完成这个操作。修改后的代码如下:
int num;
string str;
cin >> num;
cin.ignore();
getline(cin, str);
现在,getline()
就会等待我们输入字符串了。
本文介绍了 cin
和 getline()
的一个常见问题,并提供了解决方案。当需要从标准输入中先使用 cin
再使用 getline()
时,记得使用 cin.ignore()
来清空输入流中的换行符。