假设我有示例代码:
std::string s;
std::cin >> std::setw(4) >> s;
std::cout << s;
现在,对于输入abcdef
,结果将是abc
,对于abc
,结果也将是abc
。问题是如何检查字符串是否由于限制而在中间被分割,或者结果字符串是实际的字符串?我需要知道输入是否适合或某些数据被跳过。
最佳答案
虽然我知道读入 char*
时会考虑流的宽度我不知道在读入 std::string
时也会考虑它。 。假设是这样,读取将在以下三种情况下停止:
- 在这种情况下,流已被完全读取
eof()
已设置。 - 下一个字符是空格。
- 读取需要读取的字符数。
也就是说,你可以查看 in.eof()
和std::isspace(in.peek()
。嗯,有没有搞笑的std::ctype<char>
您真正需要使用的流使用的方面
std::isspace(in.getloc(),
std::char_traits<char>::to_char_type(in.peek()));
关于c++ - 使用 std::cin 中的 std::setw 限制输入大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19347629/