← 模式

验证多次读取

12345678910111213141516171819#include <sstream> #include <string> int main() { std::istringstream stream{"Chief Executive Officer\n" "John Smith\n" "32"}; std::string position; std::string first_name; std::string family_name; int age; if (std::getline(stream, position) && stream >> first_name >> family_name >> age) { // 使用这些值 } }

此模式采用 CC0 公共领域贡献 许可。

要求 c++98 或更新版本。

意图

在使用提取出的值之前,确保多个流读取操作都成功。

描述

我们创建了一个 std::istringstream 作为示例输入流,其中包含我们希望读取的一些值(第 6-8 行)。这个流可以被任何其他输入流替换,例如 std::cin 或文件流。然后,我们在第 10-13 行创建了一些对象,用于从流中读取值。

第 15-18 行if 语句条件中,我们首先使用 std::getline 执行一次无格式提取(第 15 行),然后进行一系列格式化提取(第 16 行)。&& 运算符确保只有当所有提取操作都成功时,条件才为 true。短路求值特性也确保了只有在前一个提取成功的情况下,才会尝试下一组提取操作。

如果你需要读取多行中的值,可以考虑逐行从流中读取,然后再解析每一行。

贡献者

  • Joseph Mansfield

最后更新

2018年8月27日

来源

在 GitHub 上 Fork 此模式

分享