std::cin 和 std::getline 混用的问题
如果存在如下的输入,
11
is a prime
考虑如下的程序,
std::cin>>number;
std::getline(std::cin,input)
std::cin
在读取数字 11
时,没有读取 11
后面的换行符。这个换行符被之后的 std::getline
消耗了,从而导致 std::getline
读取了一个空行。
解决办法包括,
- 使用一个额外的
getline
来消耗这个换行符; - 使用
std::cin >> std::ws;
来消耗这换行符; - 使用
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
来忽略剩余的字符。