具有值限制的int变量的定义

时间:2018-03-07 14:56:12

标签: c integer

我是C的新手。我需要定义一个具有有限值范围的整数变量。

在特定情况下,我需要定义一个int变量,它只能假设0到5之间的值,所以0,1,2,3,4,5不少,不多。

我有什么要添加到int var来定义它,如前所述?或者,这是定义它的正确方法吗?

3 个答案:

答案 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);