C ++ определяемый массив ввода в одну строку - PullRequest
0 голосов
/ 29 апреля 2018

Я довольно новичок в 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 голосов
/ 29 апреля 2018

Следующий фрагмент кода вашей программы: Массив переменной длины (VLA) , и это поддерживается только в C начиная с 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

Как создать динамический массив целых чисел

0 голосов
/ 29 апреля 2018

Без использования контейнера 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

0 голосов
/ 29 апреля 2018

Я предполагаю, что ваш вопрос "как правильно это сделать?"

Я бы сделал это так:

#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;
}

Обратите внимание, что этот код предполагает, что входные данные правильно сформированы. Если вам нужно что-то более надежное в обработке, возможно, злонамеренного ввода, это потребует дополнительных усилий. Данный код, как дано, будет давать, пробовать и продолжать, что может или не может быть подходящим для ваших целей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...