我有代码,我从用户那里接收浮点值并操纵它们。现在我想将用户输入值限制在[-100,000到+100,000]的范围内。
我是否可以通过使用限制库定义INT_MIN和INT_MAX来实现此目的?我在网上看到的一切都说明这里的最大值是+32767,最小值为-32768,如果我使用LONG_MIN,LONG_MAX,则数字会更大。
有没有办法定制范围?使用整数方法浮点数是错误的吗?
答案 0 :(得分:1)
您无法指定INT_MIN
或INT_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_MIN
或INT_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;
}
此程序将循环,直到用户输入有效值。