C ++可确定的数组输入在一行中

时间:2018-04-29 14:27:50

标签: c++ arrays input

我对c ++很陌生,似乎找不到正确的编码方法。我有n位数字,我的代码现在:

int main()
{
    int n,i;
    cin >> n;
    int a[n];
    for (i=1;i<=n;i++)
    {
        cin >> a[i];
    }
    return 0;
}

这样,数组的每个元素都必须在不同的行中输入,是否可以将数组的所有元素放在一行中,并在它们之间留出空格。

3 个答案:

答案 0 :(得分:1)

您程序的以下代码段是可变长度数组(VLA),仅在ISO C99中支持此功能。

 cin >> n;
 int a[n];

如前所述,您也可以使用std :: vector。

int main()
{
  int size;

  std::cin >> size;

  int *array = new int[size];

  delete [] array;

  return 0;
}

参考文献:

http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

How to create a dynamic array of integers

答案 1 :(得分:0)

我假设您的问题是“这样做的正确方法是什么?”

我会这样做:

#include <iostream>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

int main()
{
  int n;
  cin >> n;
  vector<int> v;
  int i = 0;
  int value;
  while (i++ < n && cin >> value)
  {
    v.push_back(value);
  }

  char const* sep = "";
  for (auto item : v)
  {
    cout << sep << item;
    sep = " ";
  }
  cout << endl;
}

请注意,此代码假设输入格式正确。如果您在处理可能的恶意输入时需要更强大的功能,则需要额外的工作。这段代码,如果给出,将放弃尝试和继续,这可能适用于您的目的,也可能不适合。

答案 2 :(得分:0)

不使用stl容器,可以这样实现:

#include <iostream>
#include <string>
#include "stdlib.h"     

void GetInput(int* inputs, int n)
{
    // store the entered numbers in a char[]
    std::string word;
    std::cout << "enter numbers (separate by space) ";
    std::getline(std::cin, word);

    char ch[100];
    strcpy_s(ch, word.c_str());
    char *temp = ch;

    // parse the char[] for integers
    for (int i = 0; strcmpi(temp, "") != 0 && i <= n; temp++,i++)   {
        *(inputs +i) = std::strtol(temp, &temp, 10);
    }

} 

int main()
{
    int n = 3;
    int inputs[10];
    GetInput(inputs,n);

    for (int j = 0; j < n; j++)
        std::cout << inputs[j] << " \n";
    return 0;
}

输出:

enter image description here