@MaratWantsToKnowALot
newbie

Как остановить заполнение массива пользователем?

Мне не известно сколько пользователь введет чисел в массив. Как мне остановить его ввод?
  • Вопрос задан
  • 691 просмотр
Решения вопроса 1
myjcom
@myjcom Куратор тега C++
Можно так
#include <iostream>
#include <iterator>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

auto input = [](const string& msg)
{
  cout << msg;
  size_t i = 0;
  cin >> i;
  return [i](istream& is){
    vector<int> v;
    copy_n(istream_iterator<int>{is}, i, back_inserter(v));
    return v;
  };
};

int main()
{
  auto v = input("Enter number of numbers, I'm lazy: ");
  auto values = v(cin);
}


Или по рабоче-крестьянски

#include <iostream>
#include <iterator>
#include <algorithm>
#include <cctype>
using namespace std;

int main()
{
  const size_t sz = 100;
  int a[sz]{0};

  cout << "Enter numbers: " << endl;

  size_t cnt = 0;
  while(cin)
  {
    char c = static_cast<char>(cin.get());
    if(isdigit(c) || c == '-' || c == '+')
    {
      if(cnt < sz - 1)
      {
        int i = 0;
        cin.putback(c);
        cin >> i;
        a[cnt++] = i;
      }
      else
      {
        cout << "Out of range: " << sz << endl;
        break;
      }
    }
    else if(c == ' ')
    {
      continue;
    }
    else
    {
      cout << "End or not number" << endl;
      break;
    }
  }
  copy_n(a, cnt, ostream_iterator<int>(cout, " "));
}



или используй самописный односвязный список вместо массива, раз не хочешь использовать контейнеры stl. В случае со списком можно не заботиться о размере (в рамках доступной памяти) и записи за пределы выделенной памяти.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Vadimatorikda
Инженер-программист, embedded разработчик
Уточните задачу. Пользователь вводит с клавиатуры числа, которые вы хотите записать себе в массив, верно? Тогда перед записью числа в массив можно проверять его значение и количество ранее записанных элементов. Если число, например, -1, то это значит, что пользователь закончил ввод. Или же пользователь ввел чисел столько, на сколько у вас выделено памяти в массиве. В этом случае сохранять больше некуда. Вы уведомляете пользователя об этом и прекращаете получение числе от него.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы