输入如下:
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/