有没有办法让变量只取某些值?
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;
}
有没有办法定义一个变量,例如只接受 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;
}