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

标签 c++ stream limit cin

假设我有示例代码:

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

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

最佳答案

虽然我知道读入 char* 时会考虑流的宽度我不知道在读入 std::string 时也会考虑它。 。假设是这样,读取将在以下三种情况下停止:

  1. 在这种情况下,流已被完全读取 eof()已设置。
  2. 下一个字符是空格。
  3. 读取需要读取的字符数。

也就是说,你可以查看 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/

相关文章:

java - 从InputStream获取URL

java - 如何停止在Java Sockets中第二次写入对象时出现streamcurrrupted异常

gitlab - 如何在 GitLab 上上传大于 10MB 的文件?

c++ - 为什么将字符串文字传递给 char* 参数有时只是编译器错误?

c++ - 如何让 Maliit 键盘在 Linux 上工作? (薄荷)

c# - Stream.CopyTo 不复制任何流数据

php - 使用 PHP 显示 SQL 结果

mysql - 如何仅使用 (My)SQL 使限制偏移动态化

c++ - 无法解析基于模板的标识符 "get".Netbeans 8.1

c++ - map 的替代品