c语言中如何怎么判断输入的是数字

Python040

c语言中如何怎么判断输入的是数字,第1张

#include <stdio.h>

#include <string.h>

// 枚举类型:自然数,整数,小数 , 未知

enum TYPE {Natural,Integer,Float,Unkonwn}

/*

一个合法的数字(包括自然数,整数,小数)的格式是:

[+-](可选) + [0个或多个数字] + [小数点](可选) + [0个或多个数字]

比如:

+1

1

-1

+3.14

3.14

-3.14

+3.

3.

-3.

+.123

.123

-.123

都是合法的数字

*/

enum TYPE check(char s[])

{

int length = strlen(s)

int start = 0 , end = length-1

// 去开始空白字符

while(start <length &&s[start]==' ' || s[start]=='\t'){start++}

// 去结尾空白字符

while(end >=0 &&s[end]==' ' || s[end]==''){end--}

// 是否负数标识

bool isNegative = false

// 是否小数标识

bool isFloat = false

// 是否有整数部分

bool hasIntegerPart = false

// 是否有小数部分

bool hasDecimalPart = false

for(int i = start i <= end i++)

{

if(s[i] == '-' || s[i] == '+')

{

if(i == start)

isNegative = (s[i] == '-')

else

return Unkonwn

}

else if(s[i] == '.')

{

if(!isFloat)

isFloat = true

else

return Unkonwn

}

else if(s[i] >= '0' &&s[i] <='9')

{

if(!isFloat)

hasIntegerPart = true

else

hasDecimalPart = true

}

else

{

return Unkonwn

}

}

if(isFloat)

{

if(hasIntegerPart || hasDecimalPart)

return Float

else

return Unkonwn

}

else

{

if(!isNegative)

return Natural

else

return Integer

}

}

int main(int argc, char *argv[])

{

char s[100]

enum TYPE type

while(1)

{

scanf("%s",s)

type = check(s)

switch(type)

{

case Natural:

printf("%s\n","Natural")

break

case Integer:

printf("%s\n","Integer")

break

case Float:

printf("%s\n","Float")

break

case Unkonwn:

printf("%s\n","Unknown")

break

}

}

return 0

}

/*

测试数据:

+1

1

-1

+3.14

3.14

-3.14

+3.

3.

-3.

+.123

.123

-.123

*/

#include<stdio.h>

intmain()

{

charc

c=getchar()

//来判断是否为数字,如果是数字那么会返回非0

if(is digit(c)!=0)

printf("是数字\n")

//来判断是否为字母,如果是字母那么返回非0

elseif (is alpha(c)!=0)

printf("是字母\n")

else

printf("是特殊字符\n")

}

扩展资料

输入一个字符判断其是字母字符还是数字字符

#include<stdio.h>

int  main()

{

char ch

printf("Input ch:")

ch=getchar()

if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))//判断是不是字母

printf("字母\n")

else if(ch>='0'&&ch<='9')//判断是不是数字

printf("数字\n")

else

printf("其他\n")

return 0

}

不会C语言。给出几个算法,代码是fortran的,供参考。

第一种,用整数除法。对于整数a,连续用10除,直到商为零。除法的次数,即为位数。

这个算法对于正负整数和零都能获得正确的结果。

第二种,用对数函数直接计算。对a取绝对值,再计算10为底的对数,所得结果取整数部分,再加1,即为位数。由于log10函数的变量不能是整数,需要a*1.0转换为实数。又由于log10的变量不能是0,因此针对a=0的情形,通过max将其转换成1.0。

第三种,逐个数数字的个数。将a取绝对值,写入字符串,统计字符串中不为空(为数字)的字节数,即为位数。