std::cin 和 std::getline 混用的问题

2023-06-12,,

如果存在如下的输入,

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'); 来忽略剩余的字符。

std::cin 和 std::getline 混用的问题的相关教程结束。

《std::cin 和 std::getline 混用的问题.doc》

下载本文的Word格式文档,以方便收藏与打印。