C语言,如何判断一个数是数字啊?

C语言,如何判断一个数是数字啊?,第1张

用scanf()从键盘输入读入一个字符串(注意别越界),之后编个循环检测每个字符,若存在不是字符'',且>'0',<'9'的字符,那就不是数字,字符''若出现一次以上也不是数字。

判断一个参数是不是数字的方法:

isNaN() 不是一个数字 is not a number
if(isNaN(a)){
alert("a不是数字");
}else{
alert("a是数字");

原理:

一、利用expr做计算时变量或字符串必须是整数的规则,把一个变量或字符串和一个已知的整数(非0)相加,看命令返回的值是否为0如果为0,就认为加法的变量或字符串为整数,否则就不是。

i=5

expr $I + 6 &>/dev/null

echo $

如果输出的是0,那么表明i是整数,反之则表示为非整数。其中$表示的是最后运行的代码的返回值

上述判断中,有&>表示的就是不管是什么,都重定向到/dev/null中。

二、使用sed加正则表达式

思路:删除一个字符串中的所有数字,看字符串的长度是否为0,如果不为0,则不是整数。

if [ -n "`echo char | sed 's/[0-9]//g'`" ]

then

echo "char"

else

echo "number"

fi

三、用变量的子串替换

思路:如果num的长度不为0,并且把num中的非数字部分删除,然后看结果是不是等于num本身,如果两者成立,那么就是数字,反之亦然。

if [ -n "$num" -a "$num" = "${num//[^0-9]/}" ]

then

echo "char"

else

echo "number"

fi

在EXCEL的单元格中,有些单元格为填写的不是数值,在某些情况下,会影响计算结果,例如,以下的表格中,红框内的单元格一个是输入了一个空格,另一个“—”符号,后面平均值的计算未将该单元格计算在内,得出的平均值并不符合日常需求。今天我们将学习一个技巧,如何用ISNUMBER判断是否是数值:

第一步,我们来认识下ISNUMBER函数——ISBLANK(VALUE),从该表达式中可以看出该函数包含1个参数,这个参数value表示需要进行检验的内容。由于该函数的返回值为逻辑值,所以在使用此函数时如果参数为数值则返回TRUE,如果参数为非数值,则返回FALSE。
第二步,我们需要判断两个单元格,我们通过and函数和ISNUMBER组合进行判断,在E2单元格中输入公式=AND(ISNUMBER(B2),ISNUMBER(C2)),下拉填充剩余单元格:

最后,在第二行和第四行就显示出为FALSE,表示这一行有非数值单元格。通过将非数值单元格调整为数值0,即可求出平均销量:

可以使用正则表达式:/(^[\-0-9][0-9]([0-9]+))$/

一、思路解析:

1、^ 表示打头的字符要匹配紧跟^后面的规则 。

2、$ 表示打头的字符要匹配紧靠$前面的规则 。

3、/^ 和 $/成对使用是表示要求整个字符串完全匹配定义的规则,而不是只匹配字符串中的一个子串。

4、\d表示数字 。

5、[ ]方括号表示查找范围 。

6、n{X,} 匹配包含至少 X 个 n 的序列的字符串。

二、代码实现:

三、打开页面,查看输出:

四、把-123修改成正数:

五、刷新页面,再次查看:

--1正则判断,适用于10g以上版本
--非正整数 
select 字段 from 表 where regexp_replace(字段,'\d','') is not null;
--非数值类型
select 字段 from 表 where regexp_replace(字段,'^[-\+]\d+(\\d+)$','') is not null;
--2自定义函数,判断非值类型
create or replace function isnumber(col varchar2) return integer is
  i number;
begin
  i := to_number(col);
  return 1;
exception
  when others then
    return 0;
end;
select 字段 from 表 where isnumber(字段)=0;

由于数字的ascii码值是连续的,所以可以通过与最小的数字'0'以及最大的数字'9'相比较,确定一个字符变量是否为数字。
比如
if(c>='0' && c<='9') printf("%c 是数字\n",c);
else printf("%c 不是数字\n",c);
如果判断要经常使用,可以将该功能封装为函数:
int is_num(char c)
{
return (c>='0' && c<='9');
}
或者宏定义:
#define is_num(c) (c>='0' && c<='9')


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13367500.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-22
下一篇 2023-07-22

发表评论

登录后才能评论

评论列表(0条)

保存