2015-01-27 2 views
0

У меня есть код, где я получаю значения с плавающей запятой от пользователя и манипулирую ими. Теперь я просто хотел бы ограничить входные значения пользователя в диапазоне от [-100 000 до +100,000].Определить ввод пользователя в пределах диапазона

Могу ли я это сделать, указав INT_MIN и INT_MAX с помощью библиотеки ограничений? Все, что я вижу в Интернете, объясняет, что максимальное значение здесь составляет +32767, минимум -32768, где цифры больше, если я буду использовать LONG_MIN, LONG_MAX.

Есть ли способ настроить диапазон? Было бы ошибкой использовать целочисленные методы для float?

+0

Как вы получаете входные значения? –

+0

Я получаю через scanf(). – ballin

+0

Проверьте значения после tha 'scanf()'. –

ответ

1

Есть ли способ настройки диапазона?

Это не рекомендуется для Вас, чтобы изменить макросы INT_MIN or INT_MAX потому limits.h (где определены эти макросы), вероятно, будет использоваться в другом месте.

Тем не менее, ответ на ваш вопрос Да:
Используйте Е() и зсапЕ(). Сделайте что-то вроде:

#define ABS_LIMIT 100000 //create your own custom limits 
int absoluteLimit = 200000;//initialize out of acceptable range 
          //to force user input 
while(fabs(absoluteLimit) >= ABS_LIMIT)//will force accepted value to be in 
{          //in range of +/-100000 
    printf("enter value:\n"); 
    scanf("%d", &absoluteLimit); 
} 

Это ограничивает вход +/- 100000. без редактирования INT_MIN или INT_MIN

+0

Предложите 'if (input> = lower && input <= upper)' – chux

+0

@chux - сделал редактирование, но OP никогда не указывал, включает ли домен допустимых значений конечные точки. Фраза _ в диапазоне of_ может быть интерпретирована в любом случае :) – ryyker

1

Вы не можете указать значения для INT_MIN или INT_MAX.

Непонятно, как вы принимаете входные значения, но если вы читаете их с консоли, вы можете проверить каждое значение после чтения и, если оно неприемлемо, попросить его снова, повторяя до вводится приемлемое значение (слово «повторение» - это намек на то, что вам понадобится цикл).

1

Эти числа являются константами, их будет не так просто изменить. Кроме того, они являются для целых чисел, а не для чисел с плавающей точкой

Правильный способ проверить вход, чтобы проверить вход:

if (fabs(input) > 100.0){ 
    //exception handling - write a message about wrong input 
} 
//process the numbers 
+0

Кроме утверждения, что этот метод является правильным способом, ваш ответ находится на правильном пути. Существуют и другие методы (конструкции), которые будут работать лучше. Например, *** [fabs()] (http://www.cplusplus.com/reference/cmath/fabs/) *** вместо 'abs()', поскольку ввод находится в плавающей запятой: 'if (fabs (ввод)> 100000) {...}; '(+1). – ryyker

+0

Правильно, извините, теперь отредактировано. –

0

Проверить эту идею

#include <stdio.h> 

float getNumber(float minimum, float maximum) 
{ 
    int result; 
    int chr; 
    float value; 

    result = 0; 
    do { 
     printf("Input a value between %g and %g > ", minimum, maximum); 

     result = scanf("%f", &value); 
     /* remove all characters from the stream until the `'\n'` is found */ 
     while (((chr = fgetc(stdin)) != EOF) && (chr != '\n')); 
    } while ((result != 1) || (value <= minimum) || (value >= maximum)); 

    return value; 
} 

int 
main() 
{ 
    float value; 

    value = getNumber(1.0, 10.0); 
    printf("%f\n", value); 

    return 0; 
} 

эта программа будет цикл до действительное значение вводится пользователем.

+0

'while ((chr = fgetc (stdin)) && (chr! = '\ N'));' будет удаляться до появления '' \ 0'' или '' \ n''.Обычно выполняется поиск 'EOF' и' '\ n''. – chux

Смежные вопросы