我是C的新手。我需要定义一个具有有限值范围的整数变量。
在特定情况下,我需要定义一个int变量,它只能假设0到5之间的值,所以0,1,2,3,4,5不少,不多。
我有什么要添加到int var
来定义它,如前所述?或者,这是定义它的正确方法吗?
答案 0 :(得分:1)
C不提供限制数值变量范围的任何工具 - 您将 为每个赋值添加自己的运行时检查。
您可以抽象出执行检查的赋值函数:
int ranged_assign( int *var, int newVal, int min, int max )
{
int result = 0;
if ( (result = (min <= newVal && newVal <= max) ) )
*var = newVal;
return result;
}
...
if ( !ranged_assign( &x, val, 0, 5 ) )
// handle range error
显然,如果你想直接从输入中分配你的远程变量,这将不起作用。你必须阅读一个临时的,然后对那个临时的范围进行检查:
if ( scanf( "%d", &tmp ) == 1 )
{
if ( !ranged_assign( &x, tmp, 0, 5 ) )
// handle range error
}
else
// handle input error
您必须弄清楚处理超出范围的作业的策略。
答案 1 :(得分:0)
通常,您可以通过检查输入并确保它位于给定限制内来控制运行时的边界。在编译时,您无法指定允许普通int保留哪些值。
另一种方法是使用枚举,在这种情况下,实际上只允许某些特定值。但只有在您确实需要为每个索引指定唯一名称时才应使用枚举。否则,使用枚举只会混淆。例如:
typedef enum
{
ZERO,
ONE,
TWO,
THREE,
FOUR,
FIVE,
} number_t;
100%相当于:
typedef enum
{
ZERO = 0,
ONE = 1,
TWO = 2,
THREE = 3,
FOUR = 4,
FIVE = 5,
} number_t;
number_t
的变量现在理论上只能保存值0到5.但这并不能阻止某人为其分配垃圾值,也不会阻止错误(或EMI)修改内容变量。因此,上面提到的运行时检查也有助于防御性编程目的。
答案 2 :(得分:-1)
int entredValue,inf,max;
printf("\nPlease enter inf value: \n");
scanf("%d", &inf);
printf("\nPlease enter max value: \n");
scanf("%d", &max);
do {
printf("\nPlease enter a value: \n");
scanf("%d", &entredValue);
}while (entredValue>max || entredValue< inf);