📜  cin之后getline()的问题>>(1)

📅  最后修改于: 2023-12-03 15:30:00.035000             🧑  作者: Mango

cin之后getline()的问题

在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() 就会等待我们输入字符串了。

总结

本文介绍了 cingetline() 的一个常见问题,并提供了解决方案。当需要从标准输入中先使用 cin 再使用 getline() 时,记得使用 cin.ignore() 来清空输入流中的换行符。