Небольшой анализ правильности ввода

Рейтинг: 0Ответов: 1Опубликовано: 02.06.2011

С клавиатуры вводится число (int), это число означает потом размер массива, естественно если было введено число <= 0, то нужно сообщить, что введенное число не верное, если введены буквы - аналогично.

cout << "Введите размеренность массива:";
cin >> n;

while(n <= 0)
{
    cout << "Вы ввели не верный размер. Введите размеренность массива: ";
    cin >> n;
}

Если я ввожу отрицательное число - всё нормально, а вот если ввожу буквы, то тогда цикл становится бесконечным и просто игнорирует cin >> n; Подскажите, пожалуйста, как исправить эту маленькую проблемку?

Ответы

▲ 3Принят
#include <iostream>
#include <limits>

int main (void)
{    
    std::cout<<"ENTER number please"<<std::endl;
    int n;
    std::cin>>n;
    while(n<=0)
    {
        std::cin.clear(); // вся работа производится в этой и следующей строчке
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
        std::cout<<"ERROR, Enter number again"<<std::endl;
        std::cin>>n;
    }
    std::cout<<"You've entered "<<n<<std::endl;
    return 1;
}

Пример вывода:

gaal@linux-lybs:~/EULER/cpp> ./a.out 
ENTER number please
sfdsf
ERROR, Enter number again
-10
ERROR, Enter number again
10
You've entered 10
gaal@linux-lybs:~/EULER/cpp>

и еще:

gaal@linux-lybs:~/EULER/cpp> ./a.out 
ENTER number please
10
You've entered 10
gaal@linux-lybs:~/EULER/cpp>