isdigit是头文件ctype.h中声明的一个函数。原型为:
int isdigit(int c);
作用:
判断c指定的字符是否为数字字符,即'0'-'9',如果是,则返回1;否则返回0。
isdigit函数的实现也比较简单,这样就可以:
int isdigit(int c)
{
return (c >= '0' && c <= '9');
}
#include
#include
#define LINELEN 80
#define MAXMUNLEN 20
int main(int argc, char *argv[])
{
char buffer[LINELEN];
char number[MAXMUNLEN];//记录有效数据
char *fgets_rtn = NULL;
char *num_ptr=number;
int ch,
isnum=0,//是否有效标记
sig=0,//正负号标记
num=0,//数字标记
poin=0;//小数点标记
while ((fgets_rtn=fgets(buffer, LINELEN, stdin))!=NULL)
{
if (*fgets_rtn=='\n')break;//空行退出
while ((ch=*fgets_rtn++)!='\0')//检测每个字符
{
switch (ch)
{
case '\n':ch='\0';break;//是有效数据跳过回车符结束
case '+':
case '-':
if (sig)
isnum=0;//下同无效数据
else
{
if(num||poin)
isnum=0;
else//未标记 ,下同
{
sig++;
isnum++;
}
}
break;
case '.':
if(poin)
isnum=0;
else
{
poin++;
isnum++;
}
break;
default:
if (isdigit(ch))
{
num++;
isnum++;
}
else if (isspace(ch))
{
if(isnum)
isnum=0;
}
else
{
num++; //设置无效数据
isnum=0;
}
break;
}//end switch
if (isnum)//如果是有效字符,写入number数据
*num_ptr++=ch;
else
{
if(sig||poin||num)
{
*num_ptr='\0';
break;//结束本次检测
}
}
}//end while
if (isnum&&num)//判断
if (poin)
printf("%s为有效double型!\n",number);
else
printf("%s为有效整型!\n",number);
else
{
//printf("%s为无效数据!\n",buffer);//会输出回车符,不完善。
fgets_rtn=buffer;
while((ch=*fgets_rtn++)!='\n'&&ch!='\0')
putchar(ch);//如果不能用putchar用://printf("%c",ch);
printf("为无效数据!\n");
}
isnum=sig=num=poin=0;//置0
num_ptr=number;
*num_ptr='\0';
}//end while
return 0;
}
//是数字 返回true 否则返回 0
头文件
#include
函数定义
int isdigit(char c)
函数说明
检查参数c是否为阿拉伯数字0到9。
返回值
若参数c为阿拉伯数字,则返回TRUE,否则返回NULL(0)。
bool isdigit(char c)
{
if(c>='0' && c<='9') return true;
else return false;
}
代码原理应该更接近于这个 而不是返回int(虽然没有太大问题)或者传入一个int参数(这个是重点),就是判断传入的字符是否是数字字符(0~9)
#include