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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
OasisKharkov
1 / 1 / 0
Регистрация: 28.07.2012
Сообщений: 35
#1

Проверка граничных значений - C++

26.11.2012, 14:25. Просмотров 480. Ответов 8
Метки нет (Все метки)

Ребята, подскажите такую штуку. К примеру, объявляю переменную типа unsigned int value, для которой характерен диапазон (0...4294967295). Организую инициализацию этой переменной через оператор cin >> value; И в случае, если я ввожу с клавиатуры число, превышающее данный диапазон, компилятор подрезает это число и оно отображается некорректно, как осуществить проверку вводимого числа, например если пользователь неправильно ввел число, сообщить ему об этом; не напишешь же if(value > UINT_MAX) cout << "Error!"; компилятор уже сам как-то подрежет число и эта условная инструкция не будет действовать!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2012, 14:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка граничных значений (C++):

Проверка вводимых значений - C++
Стоит задача не допустить ввода значений помимо чисел(0..9), точки(&quot;.&quot;) и &quot;+&quot; или &quot;-&quot;. При условии, что используется данная функция: ...

Проверка вводимых значений - C++
есть динам. массив, который вручную заполняется for (int i=0;i&lt;n;i++) { cout&lt;&lt;&quot;Введите &quot;&lt;&lt;i+1&lt;&lt;&quot; значение Urab (5...60 B) :...

Проверка корректности вводимых значений - C++
Имеется следующий код: #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace std; int main() { double a, b, c; ...

Проверка чисел на диапазон допустимых значений - C++
Всем привет! Мне нужно вывести количество введенных чисел и количество чисел, которые принадлежат промежутку. Проблема в том, что функция,...

Проверка значений переменных во время отладки - C++
как узнать текущее значение переменной во время отладки?

Битовые операции, проверка значений нескольких элементов - C++
Сам не понял что в названии темы написал, ну да ладно... Вот берём битсумму: int a = 1&lt;&lt;0|1&lt;&lt;1|1&lt;&lt;2|1&lt;&lt;3 Как проверить, что...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
26.11.2012, 14:27 #2
Всегда есть вариант со строкой. Вводим строку, проверяем кол-во символов.
0
OasisKharkov
1 / 1 / 0
Регистрация: 28.07.2012
Сообщений: 35
26.11.2012, 15:03  [ТС] #3
Не пойму, как реализовать это? Зачем вводить строку и проверять кол-во символов, мне же необходимо предотвратить ввод числа, большего чем верхний предел для диапазона UINT_MAX. Например, ввел число 5234567890, программа сообщает об ошибке, т.к. это число больше чем 4294967295...

Добавлено через 9 минут
Можно конечно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
int main()
{
    unsigned long long value;
    cout << "Enter value: ";
    cin >> value;
    if (value > UINT_MAX)
        cout << "Error!\n";
    else 
        cout << value << '\n';
 
    return 0;
}
Но блин, как-то криво.
0
BumerangSP
4286 / 1408 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
26.11.2012, 15:05 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <cstring>
#include <cstdlib>
int main()
{
     char a[] = "429496729"; 
    char b[] = "429496729";
     int i; 
     if (strcmp(a,b)>0)
         std::cout<<"Error";
     else
      std::cout<<(i=atoi(a));    
     return 0;
}
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.11.2012, 15:28 #5
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
   std::string number;
   std::cin >> number;
   int num = std::stoi(number);
}
Bash
1
2
3
4
5
forever@pterois:~/My_pro1/cpp_pro$ ./new 
2847812782748274
terminate called after throwing an instance of 'std::out_of_range'
  what():  stoi
Аварийный останов (core dumped)
Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
int main()
{
   int number = 0;
   std::cin >> number;
   while (std::cin.fail())
   {
      std::cout << "Fail" << std::endl;
      std::cin.clear();
      std::cin >> number;
   }
}
Bash
1
2
3
4
forever@pterois:~/My_pro1/cpp_pro$ ./new 
2147483648
Fail
2147483647
1
OasisKharkov
1 / 1 / 0
Регистрация: 28.07.2012
Сообщений: 35
26.11.2012, 15:30  [ТС] #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstring>
#include <cstdlib>
 
int main()
{
    int i;
    char a[] = "5677890";
    char b[] = "4294967295"; 
    
    if(strcmp(a,b)>0)
        std::cout << "Error!\n";
    else
        std::cout << (i=atoi(a));    
    
    return 0;
}
Не работает, вот что пишет Шилдт: "Если строка a лексикографически (т.е. в соответствии с алфавитным порядком) больше строки b, возвращается положительное число"
Я так понимаю, в данном случае, если число 5677890 очевидно меньше 4294967295, то когда компилятор начинает сравнивать цифры, а 5 > 4 функция выдает единицу и срабатывает оператор std::cout << "Error!\n"; а вот если ввести число не 5677890, а например 3677890, где 3<4 тогда все работает...
0
BumerangSP
26.11.2012, 15:38
  #7

Не по теме:

Ну, это ж я приблизительно) Обратите лучше внимание на способ выше.

0
OasisKharkov
1 / 1 / 0
Регистрация: 28.07.2012
Сообщений: 35
26.11.2012, 16:11  [ТС] #8
Теперь понял, вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int main()
{
   unsigned number = 0;
   std::cout << "Enter a number: ";
   std::cin >> number;
   while (std::cin.fail())
   {
      std::cout << "Fail!" << std::endl;
      std::cin.clear();
      std::cout << "Enter a number again: ";
      std::cin >> number;
   }
   std::cout << "The value is: " << number << "\n";
   return 0;
}
ForEveR, подскажи пожалуйста, где почитать про функции fail() и clear(), чего-то не могу найти их на msdn.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
26.11.2012, 16:18 #9
OasisKharkov, http://www.cplusplus.com/reference/istream/istream/
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.11.2012, 16:18
Привет! Вот еще темы с ответами:

Запрос логина и пароля и проверка правильности введенных значений - C++
написать программу запрашивающая логин и пароль и выполняющую проверку правильности введенных значений

Создание очереди чисел (умножение элементов, добавление и удаление, проверка значений) - C++
Здравствуйте уважаемые форумчане... Тут такое дело, я пишу контрольную и задание меня смущает, так что прошу помощи! Пожалуйста, если можно...

Visual C++ проверка ввода на число, проверка на кирилицу - C++
Суть ввести с клавиатуры нечто, и повторять ввод до тех пор пока введенное число не будет числом. Этот код проверяет на буквы и знаки,...

Определить наибольшее из всех отрицательных значений, наибольшее из всех значений, количество нулевых значений - C++
Доброго времени суток. Помоги пожалуйста,никак не получается. Использование функций в языке СИ, получающих и возвpащающих pазличное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.11.2012, 16:18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru