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'); 来忽略剩余的字符。
posted @ 2023-03-05 22:49  Revc  阅读(106)  评论(0编辑  收藏  举报