@MaratWantsToKnowALot
newbie

Как остановить ввод после нажатия Enter?

Пользователь вводит ряд чисел, сколько именно, мне не известно, ввод заканчивается клавишей enter. Как реализовать эту схему? getline не помогает
  • Вопрос задан
  • 852 просмотра
Пригласить эксперта
Ответы на вопрос 2
@mloborev
Попробуйте gets()
Ответ написан
Комментировать
myjcom
@myjcom Куратор тега C++
Попробуй так

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

auto get_numbers = [](istream& is){
  vector<int> numbers;
  if(is){
    int n  = 0;
    while(is.get() != 10) // 10 linux; 13 windows
    {
      is.unget();
      is >> n;
      numbers.push_back(n);
    }
  }
  return numbers;
};

auto get_numbers2 = [](istream& is){
  string s;
  getline(is, s);

  istringstream sn(s);
  vector<int> numbers;

  copy(istream_iterator<int>(sn), {}, back_inserter(numbers));
  return numbers;
};

auto get_numbers3 = [](istream& is){
  char c = 0;
  vector<int> numbers;
  int n = 0;
  // вот тут предполагается что на вход будут подаваться 
  // все таки обычные целые числа а не 5---42 --28-------56
  while((c = is.get()) && (isdigit(c) || c == ' ' || c == '-'))
  {
    is.unget();
    is >> n;
    numbers.push_back(n);
  }
  return numbers;
};

int main()
{
  auto vn = get_numbers(cin);
  if(!vn.empty())
  {
    copy(vn.begin(), vn.end(), ostream_iterator<int>(cout, " "));
  }
  else
  {
    cout << "empty vn";
  }

  cout << endl;

  auto vn2 = get_numbers2(cin);
  if(!vn2.empty())
  {
    copy(vn2.begin(), vn2.end(), ostream_iterator<int>(cout, " "));
  }
  else
  {
    cout << "empty vn2" << endl;
  }

  cout << endl;

  auto vn3 = get_numbers3(cin);
  if(!vn3.empty())
  {
    copy(vn3.begin(), vn3.end(), ostream_iterator<int>(cout, " "));
  }
  else
  {
    cout << "empty vn3" << endl;
  }
}

Ответ написан
Комментировать
Ваш ответ на вопрос

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

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