如何在C ++中将多个数组作为输入?

时间:2017-03-06 16:28:17

标签: c++ arrays io

我一周前开始学习C ++,来自C。

我输入的格式如下:

7
13 -4 -10 4 9 7 -3
4
0 -2 -1 2
2
3 5
0

第一个数字给出第一个数组中的元素数。一旦这个数字为零,我们就停止扫描数组。

我想将这些数组扫描成一个数组数组,如下所示:

[[13,-4,-10,4,9,7,-3] , [0,-2,-1,2] , [3,5]]

我知道如何扫描第一个数组:

int n;
int array1[MAXLENGTH];
cin >> n;
for (int i = 0; i < n; i++) {
    cin >> array1[i];
    // scanf("%d", &array1[i]);
}

我被卡在0 -2 -1 2上,因为它从零开始。

如何在这些阵列中扫描并在遇到最后一个零时停止?

3 个答案:

答案 0 :(得分:1)

无论数据如何,输入模式都是相同的:

unsigned int array_index = 0U;
unsigned int quantity;
std::vector<std::vector<int> > database;
while (cin >> quantity)
{
  if (quantity == 0U)
  {
     break;
  }
  int value = 0;
  for (unsigned int i = 0; i < quantity; ++i)
  {
    cin >> value;
    database[array_index].push_back(value);
  }
  ++array_index;
}

矢量矢量应该能够包含数据。

输入数据行:

4
0 -2 -1 2

4表示第二组的数字数量。 0是第二组数据的第一个数据。

输入文件中有3组数据。

答案 1 :(得分:1)

如其他答案中所述,您应该有两个嵌套循环。

这是外循环:

std::vector<std::vector<int>> data;

while (true)
{
    int size = 0;

    std::cin >> size;
    if (size == 0)
        break;

    std::vector<int> array;
    ... // fill the array
    data.push_back(array);
}

C ++向量具有动态大小。也就是说,在定义动态数组时,您不需要知道大小是多少 - 它会在元素添加到其中时调整其大小(使用push_back)。这对外循环很方便。

然而,对于内部循环,使用预先分配的向量更方便,因为您的代码“早知道”了数组的大小:

std::vector<int> array(size); // allocate the array and set all elements to zero
for (int i = 0; i < size; ++i)
{
    std::cin >> array[i];
}

您还可以使用基于范围的循环:

std::vector<int> array(size); // allocate the array and set all elements to zero
for (int& value: array)
{
    std::cin >> value;
}

答案 2 :(得分:0)

int n;
int array1[MAXLENGTH];
while(true)
{
cin >> n;
if(n == 0) break;
for (int i = 0; i < n; i++) {
    cin >> array1[i];
    // scanf("%d", &array1[i]);
}
}

加上当然你应该使用std :: vector,并且你输入丢失了,因为它存储在同一个数组中,每次都会被覆盖。