问题: 如果在getline 函数前 调用 cin 读取变量,则 getline会忽略一行?????
贴上代码:
片段一:
#include <string>
#include <iostream>
int main(int argc, char *argv[])
{
std::string str;
std::cin >> str;
std::cout << "str = " << str << std::endl;
std::string temp;
getline(std::cin, temp);
std::cout << "temp = " << temp << std::endl;
return 0;
}
操作: 从终端输入 ronnie , 回车
程序输出如下:
ronnie
str = ronnie
temp =
分析: 居然直接跳过了getline 的输入,注意:如果在getline前 调用了 std::cin 输入,则 getline会跳过一行,那么,怎么来处理这个问题?看片段二
片段二:
#include <string>
#include <iostream>
int main(int argc, char *argv[])
{
std::string str;
std::cin >> str;
std::cout << "str = " << str << std::endl;
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::string temp;
getline(std::cin, temp);
std::cout << "temp = " << temp << std::endl;
return 0;
}
操作: 从终端输入 ronnie , 回车
程序输出如下:
ronnie
str = ronnie
此时没有显示 temp =
再输入 o'sullivan,回车
程序输出如下:
temp = o'sullivan
分析: 比较片段一 和 片段二 发现,片段二添加了一行代码(蓝体字) ,片段二中getline不会跳过,会按照我们既定的思路运行。
总结: 如果在 getline 前,调用cin输入,则在getline 使用前,添加一行代码,即可解决问题, std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');