C++ Ввод массива с пробелами
Необходимо ввести числа в массив через пробелы. Например:
1 12 34 5 6 -3 2
Где 1 - первый элемент массива, 12 - второй и т.д.
В моём коде массив вводится по элементам (после каждого числа нажимается энтер). Что необходимо изменить?
int input_mas(int mas_f[], int& a_f)
{
cout << "Введите массив:" << endl;
for(int i=0;i<a_f;i++)
while ((!(cin>>(mas_f[i])) || (cin.peek() != '\n')))
{
cin.clear();
while (cin.get() != '\n');
cout << "Ошибка ввода! Можно вводить только целые числа." << endl;
cout << "Повторите ввод!" << endl;
}
}
Заранее спасибо.
Ответы (2 шт):
Автор решения: user394222
→ Ссылка
Прочитайте сразу всю строку и парсите её по числам.
Например, с помощью std::getline().
Автор решения: Harry
→ Ссылка
Понимаете, проблема в том, что если вы вводите строку целиком, то ее обработка начнется после нажатия Enter, и как-то глупо потом пояснять - измените пятое число, вы там ошиблись... :) - придется просить переввести всю строку целиком...
Но если идти на это и весь массив вводится в одной строке - то можно примерно так:
void input_mas(int mas_f[], int a_f)
{
cout << "Введите массив:" << endl;
bool fail = false;
for(;;)
{
for(int i = 0; i < a_f; i++)
{
if (!cin >> mas_f[i]) { fail = true; break; }
}
if (fail)
{
cin.clear();
while (cin.get() != '\n');
cout << "Ошибка ввода! Можно вводить только целые числа." << endl;
cout << "Повторите ввод!" << endl;
} else break;
}
}