为什么 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 特定文本文件输入转换处理。
在此代码中,当我一一输入时,我得到了预期的正确输出(正确的字符串大小使用 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 特定文本文件输入转换处理。