Проверка на пустой ввод с++

212
19 февраля 2018, 03:08

Проверка на пустой ввод или то, что введенная строка НЕ цифра работает через раз. Допустим, если два раза ввести пустую строку в поток, то когда вводишь число в третий раз, то он тоже показывает ошибку ввода. Надо чтобы работал не через раз, а корректно)

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;
    }
Answer 1

Как я понимаю, вам нужно ввести целочисленное значение.

На днях уже отвечал, может, и вам пригодится.

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');
    }
}
Answer 2

есть еще такой вариант

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));

теперь вектор будет содержать все числа вводимых корректно

READ ALSO
Поиск в массиве. Найти наибольшее в строке и наименьшее в столбце

Поиск в массиве. Найти наибольшее в строке и наименьшее в столбце

Дан двумерный массивНайти наибольшее значение в строке и наименьшее значение в столбце

133
QMessageBox перевод кнопок

QMessageBox перевод кнопок

Как в таком примере перевести кнопки с YES/NO на свой текст либо загрузке файла с переводом

198
Как осуществить ввод списка с отступом от края

Как осуществить ввод списка с отступом от края

как хотите так и вводите - фамилии будут в вашем векторе

130
Рисование изображений в Qt

Рисование изображений в Qt

Есть ли в Qt widget или QML - виджет на котором можно рисовать и в дальнейшим производить манипуляции над изображением (ну это уже я буду реализовывать)

116