C 设置textBox只能输入数字(正数,负数,小数)简单实现

在C语言中,要实现textBox只能输入数字(包括正数、负数、小数),可以使用以下方法:

1. 对输入的字符进行判断,如果不是数字或者符号(如负号、小数点),则不允许输入。

2. 判断负号或小数点输入的位置是否正确,如果不正确,则不允许输入。

3. 判断输入的数字是否超出范围,如果超出范围,则不允许输入。

下面我们来详细介绍这三个方法的实现:

1. 对输入的字符进行判断,如果不是数字或者符号(如负号、小数点),则不允许输入。

可以使用C语言中的isdigit()函数来判断一个字符是否为数字。该函数在头文件中:

```C

// 判断一个字符是否为数字

int isdigit(int c);

```

该函数的返回值为非零值表示该字符是数字,返回值为零表示该字符不是数字。因此,我们只需要在输入textBox时,对输入的字符进行判断,如果不是数字或者符号,则不允许输入。下面是一个示例代码:

```C

#include

// 判断一个字符是否为数字或符号

int is_number(int c)

{

return isdigit(c) || c == '-' || c == '.';

}

// textBox输入框只能输入数字或符号

void textBox_input_only_number()

{

int c;

while ((c = getchar()) != EOF)

{

if (is_number(c))

{

putchar(c);

}

}

}

```

在上面的示例代码中,我们使用了一个is_number()函数来判断一个字符是否是数字或符号。如果是数字或符号,则允许输入;否则不允许输入。

2. 判断负号或小数点输入的位置是否正确,如果不正确,则不允许输入。

在上面的示例代码中,我们将负号和小数点也看作是符号来处理。由于负号和小数点只能出现在数字的开头和结尾,因此我们需要判断负号和小数点的位置是否正确。

负号只能出现在数字的开头,可以使用下面的方法来判断:

```C

// 判断一个字符是否为可接受的负号

int is_minus(int c)

{

static int last = '\n';

if (last == '\n' && c == '-')

{

last = c;

return 1;

}

last = c;

return 0;

}

```

小数点只能出现一次,而且只能出现在一个数字的中间或结尾,可以使用下面的方法来判断:

```C

// 判断一个字符是否为可接受的小数点

int is_dot(int c)

{

static int last = '\n';

if (isdigit(last) && c == '.')

{

last = c;

return 1;

}

last = c;

return 0;

}

```

这里我们采用了一个静态变量last来记录上一个输入的字符。如果last是换行符,同时当前字符是负号,则该负号是合法的;如果last是数字,同时当前字符是小数点,则该小数点是合法的。否则,该字符是不合法的。

3. 判断输入的数字是否超出范围,如果超出范围,则不允许输入。

输入的数字可能超出int、float和double的范围,因此我们需要根据数据类型的不同,采用不同的方法来判断输入的数字是否合法。

对于int类型的数字,可以使用下面的方法来判断:

```C

// 判断一个字符串是否可以转化为int类型的数字

int is_int(const char* str)

{

char* endp;

long x = strtol(str, &endp, 10);

if (*endp != '\0' || x > INT_MAX || x < INT_MIN)

{

return 0;

}

return 1;

}

```

在上面的方法中,我们使用了标准库函数strtol()来将输入的字符串转化为long类型的数字。如果转化成功,同时该数字在int类型的范围之内,则该数字是合法的;否则该数字是不合法的。

对于float和double类型的数字,则需要使用标准库函数strtod()来转化字符串。由于float和double类型的数字有精度限制,因此我们需要将输入的数字转化为long double类型,然后再转化为float或double类型,才能保证精度正确。下面是一个示例代码:

```C

#include

#include

#include

// 判断一个字符串是否可以转化为int类型的数字

int is_number(const char* str)

{

char* endp;

long double x = strtod(str, &endp);

if (*endp != '\0')

{

return 0;

}

if (x > FLT_MAX || x < -FLT_MAX)

{

return 0;

}

return 1;

}

```

在上面的示例代码中,我们将输入的字符串转化为long double类型的数字x,然后判断该数字是否在float类型的范围之内。如果超出范围,则该数字是不合法的。

最后,我们将上面的方法综合起来,就可以实现textBox只能输入数字(包括正数、负数、小数)的功能了。下面是一个示例代码:

```C

#include

#include

#include

#include

// 判断一个字符是否为数字或符号

int is_number(int c)

{

return isdigit(c) || is_minus(c) || is_dot(c);

}

// 判断一个字符是否为可接受的负号

int is_minus(int c)

{

static int last = '\n';

if (last == '\n' && c == '-')

{

last = c;

return 1;

}

last = c;

return 0;

}

// 判断一个字符是否为可接受的小数点

int is_dot(int c)

{

static int last = '\n';

if (isdigit(last) && c == '.')

{

last = c;

return 1;

}

last = c;

return 0;

}

// 判断一个字符串是否可以转化为int类型的数字

int is_int(const char* str)

{

char* endp;

long x = strtol(str, &endp, 10);

if (*endp != '\0' || x > INT_MAX || x < INT_MIN)

{

return 0;

}

return 1;

}

// 判断一个字符串是否可以转化为float类型的数字

int is_float(const char* str)

{

char* endp;

long double x = strtod(str, &endp);

if (*endp != '\0')

{

return 0;

}

if (x > FLT_MAX || x < -FLT_MAX)

{

return 0;

}

return 1;

}

// 判断一个字符串是否可以转化为double类型的数字

int is_double(const char* str)

{

char* endp;

long double x = strtod(str, &endp);

if (*endp != '\0')

{

return 0;

}

if (x > DBL_MAX || x < -DBL_MAX)

{

return 0;

}

return 1;

}

// textBox输入框只能输入数字或符号

void textBox_input_only_number()

{

int c;

char buffer[1024] = {0}; // 数字的缓冲区,用于存储输入的数字

int i = 0; // 缓冲区的下标

while ((c = getchar()) != EOF)

{

if (is_number(c))

{

putchar(c);

buffer[i++] = c;

}

else if (c == '\n')

{

// 以换行符为输入结束的标志

buffer[i] = '\0';

if (is_int(buffer))

{

printf(" is integer\n");

}

else if (is_float(buffer))

{

printf(" is float\n");

}

else if (is_double(buffer))

{

printf(" is double\n");

}

else

{

printf(" is invalid number\n");

}

// 清空缓冲区

i = 0;

buffer[0] = '\0';

}

}

}

```

在上面的示例代码中,我们使用了一个buffer数组来存储输入的数字,并使用i变量来记录buffer的下标。在输入数字时,如果该字符是数字或符号,则输出该字符,并将该字符存储到buffer中;否则结束输入,并使用上面的is_int()、is_float()和is_double()函数判断输入的数据类型是否正确。最后,我们使用换行符('\n')作为输入结束的标志,并清空buffer,准备下一次输入。

综上所述,我们就可以使用上述方法实现textBox只能输入数字(包括正数、负数、小数)的功能。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(83) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部