c++ - 如何使用 cin 处理以下类型的输入?

标签 c++ input cin

输入如下:

2

3 2 1 4
10.3 12.1 2.9 1.9

2 1 3
9.8 2.3 1.2

所以 2 是测试用例的数量。然后是一个空行。然后是一个测试用例。单个测试由两行分别为整数和浮点值组成。整数的数量等于浮点值的数量。然后又是一个空行,然后是第二个测试。
我面临两个问题:首先,如果我知道会有多少数字,我可以使用 for 循环;第二个问题是在测试用例之后和测试用例之间有空行。我不知道如何使用 cin 读取它们或忽略它们。我将把这些值存储在 vector 中。谢谢

最佳答案

可以使用getline函数来读取行,例如:

string line;
std::getline(std::cin, line);

然后,您需要解析该行。有两种情况(阅读测试用例数后)。要么你打了一个空行,要么有 n 整数。您可以一个一个地读取整数并将它们添加到您的 vector 中。如果在缓冲区完成后得到 0 个整数,那么它是一个空行:

unsigned int n;
std::ostringstream sin(line);
while (sin >> number)
{
    // add number to your vector
    ++n;
}
if (n == 0)
    // go back and try getline again

现在您有了 n,使用 float 读取下一行应该很容易。只需使用一个循环,因为您知道每个测试用例的 float 与整数数相同。

关于c++ - 如何使用 cin 处理以下类型的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19058354/

相关文章:

c++ - 继续指导。和 C++ 中 for 循环的时间复杂度

c++ - 如何在 C++ 中将文件作为参数传递?

javascript - 多个文件 - 在 DIV 中预览

c++ - cin.getline() 跳过

c++ - 使用 constexpr 混淆 std::array

c++ - 用静态成员函数替换静态常量成员的优点

c++ - 如果单个 cpp 文件构建可执行文件

java - 从 Windows 命令行键盘读取数据,无需将光标移动到下一行

C++ GetLine() 问题,命令行程序

c++ - 添加 vector