定义范围内的用户输入

时间:2015-01-27 19:07:02

标签: c io floating-point

我有代码,我从用户那里接收浮点值并操纵它们。现在我想将用户输入值限制在[-100,000到+100,000]的范围内。

我是否可以通过使用限制库定义INT_MIN和INT_MAX来实现此目的?我在网上看到的一切都说明这里的最大值是+32767,最小值为-32768,如果我使用LONG_MIN,LONG_MAX,则数字会更大。

有没有办法定制范围?使用整数方法浮点数是错误的吗?

4 个答案:

答案 0 :(得分:1)

您无法指定INT_MININT_MAX的值。

目前尚不清楚如何接受输入值,但如果您是从控制台读取它们,则可以在读取后检查每个值,如果不可接受,请再次询问,重复直到输入可接受的值(单词“重复”是一个提示,你需要一个循环)。

答案 1 :(得分:1)

这些数字是常数,改变它们并不是很简单。另外,它们是整数,而不是浮点数

检查输入的正确方法是检查输入:

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

答案 2 :(得分:1)

有没有办法自定义范围?

不建议您更改宏 INT_MIN or INT_MAX ,因为可能会使用limits.h(定义了这些宏)别处。

尽管如此,您问题的答案是
使用printf()和scanf()。做类似的事情:

#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_MININT_MIN

答案 3 :(得分: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;
}

此程序将循环,直到用户输入有效值。