Форум программистов, компьютерный форум, киберфорум
Наши страницы

Некорректно работает функция проверки на численность - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разветвляющийся алгоритм. Определить размеры очередей после проезда маршрутного такси заданной вместимости http://www.cyberforum.ru/cpp-beginners/thread1349292.html
Известны размеры очередей на трех соседних остановках. Определить размеры очередей после проезда маршрутного такси заданной вместимости.
C++ Структуры, определить средний бал и количество отличников Условие задания: Поля структуры: Фамилия Группа Физика Информатика История Задача такова: http://www.cyberforum.ru/cpp-beginners/thread1349258.html
Определить, есть ли в заданной строке цифра C++
Условие задания: Определить, есть ли в заданной строке цифра. Вывести сообщение об этом. Помогите переделать код, у меня есть, но там ошибки какие-то и мне нужно с объяснением как каждая строчка...
Замена букв на пробелы C++
Дан массив симолов,заменить лат. прописную букву от a до z если есть на пробел.
C++ Преобразование символов в строке http://www.cyberforum.ru/cpp-beginners/thread1349246.html
Нужно изменить буквы в строке по следующему принципу: "a" на "b", "A" на "B", "z" на "a" и т.д. Но толкнулся с такой проблемой: программа строку меняет, но сами изменения не сохраняются. То есть...
C++ Структуры и строчные массивы Условие задания: Введите массив символов из 15 элементов. Подсчитать количество гласных русских букв. Помогите переделать код, у меня есть, но там ошибки какие-то и мне нужно с объяснением как... подробнее

Показать сообщение отдельно
Иван_Богданов
3 / 3 / 0
Регистрация: 18.12.2014
Сообщений: 64

Некорректно работает функция проверки на численность - C++

09.01.2015, 13:21. Просмотров 398. Ответов 11
Метки (Все метки)

Фрагмент кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//...
bool is_number() { //*
    while(cin.fail()) {
        cin.clear();
        cin.sync();
        return false;} 
    return true;
}
 
int main() {
int i;
//...
do { cout << "Количество значений = "; cin >> i;
if(!is_number()) //проверяем переменную, число ли она...
    cout << "Exception: Invalid non-numeric value!\n\n"; 
if(i<=INT_MIN || i>=INT_MAX) //и умещается ли в тип
    cout << "Exception: Invalid too large or too small value!\n\n";
if(i<=0) //наше условие: строго больше нуля
    cout << "Exception: Invalid less than or equal to zero value!\n\n";
/*если какое-то условие не выполняется, прога выведет сообщение об ошибке*/
} while(!is_number() || i<=INT_MIN || i>=INT_MAX || i<=0); //и крутим цикл, пока хотя бы одно условие неверно
//...
* - "устанавливает бит "fail", если встречает символы, отличные от цифр. Затем, программа очищает бит "fail" и удаляет некорректный символ из потока, затем продолжает выполнение." Эта аллюзия на ф-ю с сайта микромягкого:...
C++
1
2
3
4
5
6
if (cin.fail())
      {
         cin.clear();
         char c;
         cin >> c;
      }
Вроде, все просто, но программа некорректно работает: вводим букву, прога выводит нужную ошибку о наличии букв и выкидывает из цикла, как будто все нормально.
Вводим число "дофига" (большее, чем вмещает тип) - та же ошибка и выброс из цикла.
Но если ведем число меньше или равно нулю, все нормально: нужное сообщение об ошибке и повтор цикла. Если потом ввести число "дофига", то выдаст две ошибки: о нечисловом значении, которое мешьне или равно нулю.
В чем же дело? (Компилятор от микромягкого VS2010)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru