Проверка на пустой ввод или то, что введенная строка НЕ цифра работает через раз. Допустим, если два раза ввести пустую строку в поток, то когда вводишь число в третий раз, то он тоже показывает ошибку ввода. Надо чтобы работал не через раз, а корректно)
int size()
{
int g;
string a;
getline(cin, a);
while (a.length() == 0)
{
cout << "input error" << endl;
getline(cin, a);
}
for (int h = 0; h < a.length(); h++)
{
while (isdigit(a[h]) == false)
{
cout << "input error" << endl;
getline(cin, a);
h = 0;
}
if (h == a.length() - 1)
{
g = atoi(a.c_str());
h++;
}
}
return g;
}
Как я понимаю, вам нужно ввести целочисленное значение.
На днях уже отвечал, может, и вам пригодится.
int inputInt(const char * prompt, int m = INT_MIN, int M = INT_MAX)
{
int N;
for (;;) {
std::cout << prompt << " (целое от " << m << " до " << M << "): " << std::flush;
if ((std::cin >> N).good() && (m <= N) && (N <= M)) return N;
if (std::cin.fail()) {
std::cin.clear();
std::cout << "Неверный ввод, повторите.\n";
} else {
std::cout << "Число вне допустимого диапазона значений. Повторите ввод.\n";
}
std::cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
есть еще такой вариант
std::vector<int> val;
const int n = 3; // мы хотим попытаться вводить число 3 раза
for (int i = 0; i < n; ++i)
std::copy(std::istream_iterator<int>(std::cin), std::istream_iterator<int>(),
std::back_inserter(val));
теперь вектор будет содержать все числа вводимых корректно
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Дан двумерный массивНайти наибольшее значение в строке и наименьшее значение в столбце
Как в таком примере перевести кнопки с YES/NO на свой текст либо загрузке файла с переводом
как хотите так и вводите - фамилии будут в вашем векторе
Есть ли в Qt widget или QML - виджет на котором можно рисовать и в дальнейшим производить манипуляции над изображением (ну это уже я буду реализовывать)