有没有办法让变量只取某些值?

is there is a way to make a variable take only certain values?

有没有办法定义一个变量,例如只接受 1 到 100 之间的一个值?

如果用户尝试分配一个超出此区间的值,程序会报错。

我不是在寻找输入控制的算法,像这样:

#include <stdio.h> 

int main ( ) {
    int n ;
    printf("give an interger number between 1 and 100 : ");
    scanf("%d",&n);

    while ( n < 1 || n > 100 )
    {
        printf("given value is wrong\ngive a new value between 1 and 100 : ");
        scanf("%d",&n);
    }
    return 0 ;
}

Is there any way to define a variable for example that only accepts one values from 1 to 100?

不,不直接。


或者,形成一个 struct 并提供 get 和 set 函数。 Information hiding。用户只能使用函数设置变量。

struct a1to100;
bool a1to100_set(struct a1to100 *a, val); // Return error flag.
int a1to100_read(struct a1to100 *a);      // Return 1 on success, EOF on end-of-file
int a1to100_get(const struct a1to100 *a); // Return value

struct a1to100 *a1to100_create(void);
void a1to100_free(struct a1to100 *a);

或者创建一个辅助函数来读取 int sub-range。示例:

int read_int_subrange(int min, int max, int value_on_eof) {
  char buf[100];
  printf("Give an integer number between %d and %d : ", min, max);

  while (fgets(buf, sizeof buf, stdin)) {
    char *endptr;
    errno = 0;
    long val = strtol(buf, &endptr, 0);
    if (endptr > buf && *endptr == '\n' && errno == 0 && val >= min && val <= max) {
      return (int) val;
    }
    printf("Given value is wrong\nGive a new value between %d and %d :\n", 
        min, max);
  }

  return value_on_eof;
}