使用std :: cin中的std :: setw限制输入大小

时间:2013-10-13 16:43:38

标签: c++ stream limit cin

假设我有示例代码:

std::string s;
std::cin >> std::setw(4) >> s;
std::cout << s;

现在,对于输入abcdef,结果将为abc,对于abc,结果将为abc。问题是如何检查字符串是否由于限制而在中间分割,或者结果字符串是否为实际字符串?我需要知道输入是否适合或是否跳过某些数据。

1 个答案:

答案 0 :(得分:3)

虽然我知道在阅读char*时会考虑流的宽度,但我并不知道在阅读std::string时也会考虑它。假设是,阅读将在三个条件下停止:

  1. 完全读取流,在这种情况下eof()已设置。
  2. 下一个字符是空格。
  3. 读取需要阅读的字符数。
  4. 也就是说,您可以查看in.eof()std::isspace(in.peek()。好吧,你真正需要使用的流是否有一个有趣的std::ctype<char>方面

    std::isspace(in.getloc(),
        std::char_traits<char>::to_char_type(in.peek()));