为什么 std::string.size() 在我的代码中表现异常?

Why std::string.size() behaves abnormally in my code?

在此代码中,当我一一输入时,我得到了预期的正确输出(正确的字符串大小使用 std::string.size()),但是当我输入三个或四个时一起输入(或批量输入)输出(字符串大小)增加 2.

Ps:查看附加的 输出片段

#include <iostream>
int main()
{
int count;
std::cin >> count;

std::cin.ignore();

while (count--)
{

    std::string s;
    std::getline(std::cin, s);

    std::cout << s.size() << '\n';
}

return (0);
}

编辑:我已经打印了所有输入的字符串,发现最后多出的字符是两个空格,如下所示,(虽然我已经试过了,但仍然不知道原因):

   5 
   </h1>  
   </h1>  7
   Clearly_Invalid    
   Clearly_Invalid  17
   </singlabharat>    
   </singlabharat>  17
   </5>  
   </5>  6
   <//aA>

std::cin.ignore(); 忽略到 EOF 的字符。输入一行时,遇到EOF。当你输入几行时,不满足EOF,但是满足\n。于是下getline后输入5returns空字符串,长度为0.

When consuming whitespace-delimited input (e.g. int n; std::cin >> n;) any whitespace that follows, including a newline character, will be left on the input stream. Then when switching to line-oriented input, the first line retrieved with getline will be just that whitespace. In the likely case that this is unwanted behaviour, possible solutions include:

  • An explicit extraneous initial call to getline
  • Removing consecutive whitespace with std::cin >> std::ws
  • Ignoring all leftover characters on the line of input with cin.ignore(std::numeric_limitsstd::streamsize::max(), '\n');

其他行的长度可能是通过粘贴包含 \r\n 的文本而增加的,这些文本未被中间的 MS 特定文本文件输入转换处理。