@MaratWantsToKnowALot
newbie

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

Мне не известно сколько пользователь введет чисел в массив. Как мне остановить его ввод?
  • Вопрос задан
  • 641 просмотр
Решения вопроса 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. В случае со списком можно не заботиться о размере (в рамках доступной памяти) и записи за пределы выделенной памяти.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Vadimatorikda
Инженер-программист, embedded разработчик
Уточните задачу. Пользователь вводит с клавиатуры числа, которые вы хотите записать себе в массив, верно? Тогда перед записью числа в массив можно проверять его значение и количество ранее записанных элементов. Если число, например, -1, то это значит, что пользователь закончил ввод. Или же пользователь ввел чисел столько, на сколько у вас выделено памяти в массиве. В этом случае сохранять больше некуда. Вы уведомляете пользователя об этом и прекращаете получение числе от него.
Ответ написан
Комментировать
Gremlin92
@Gremlin92
Целеустремленный
Используйте вместо массива std::vector, а вначале спросите пользователя сколько он хочет ввести данных,заведите счетчик по окончании которого будет выход из цикла
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы