在范围内定义用户输入
Define User Input Within a Range
我有代码可以从用户那里接收浮点值并对其进行操作。现在我只想将用户输入值限制在 [-100,000 到 +100,000] 的范围内。
我可以通过使用限制库定义 INT_MIN 和 INT_MAX 来做到这一点吗?我在网上看到的所有内容都说明这里的最大值是 +32767,最小值是 -32768,如果我使用 LONG_MIN、LONG_MAX.
,数字会更大
有没有办法自定义范围?对浮点数使用整数方法会不会是错误的?
您无法指定 INT_MIN
或 INT_MAX
的值。
不清楚您是如何接受输入值的,但是如果您从控制台读取它们,您可以在读取后检查每个值,如果不可接受,请再次请求,重复直到输入可接受的值(单词 "repeating" 暗示您需要一个循环)。
这些数字是常量,要改变它们并不容易。另外,它们适用于整数,不适用于浮点数
检查输入的正确方法是检查输入:
if (fabs(input) > 100.0){
//exception handling - write a message about wrong input
}
//process the numbers
检查这个想法
#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;
}
此程序将循环直到用户输入有效值。
有没有办法自定义范围?
不建议您更改宏 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
我有代码可以从用户那里接收浮点值并对其进行操作。现在我只想将用户输入值限制在 [-100,000 到 +100,000] 的范围内。
我可以通过使用限制库定义 INT_MIN 和 INT_MAX 来做到这一点吗?我在网上看到的所有内容都说明这里的最大值是 +32767,最小值是 -32768,如果我使用 LONG_MIN、LONG_MAX.
,数字会更大有没有办法自定义范围?对浮点数使用整数方法会不会是错误的?
您无法指定 INT_MIN
或 INT_MAX
的值。
不清楚您是如何接受输入值的,但是如果您从控制台读取它们,您可以在读取后检查每个值,如果不可接受,请再次请求,重复直到输入可接受的值(单词 "repeating" 暗示您需要一个循环)。
这些数字是常量,要改变它们并不容易。另外,它们适用于整数,不适用于浮点数
检查输入的正确方法是检查输入:
if (fabs(input) > 100.0){
//exception handling - write a message about wrong input
}
//process the numbers
检查这个想法
#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;
}
此程序将循环直到用户输入有效值。
有没有办法自定义范围?
不建议您更改宏 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