1.由于你输入的这一串数据可能都为数字,也可能包含其它字符,所以首先用一字符数组存放这个字符串。
2.用strlen函数计算这个字符串的长度,在此基础上借助for循环或while循环实现数组元素的遍历。
3.遍历每一个元素的同时用if语句判断这个元素的ascii码所在的范围是否在48~57之间,如果不在则中止循环,输出判断结果(即不是数字)。
4.如果最后一个元素仍然是数字,则整个字符串则为一个大数。
由于数字的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')
你写的这个有太多的错误。至于定义数组的时候a[N]这种错误我就不讲了还有在循环里面(i=1i<Ni++)
N没赋值就调用的错误我也不讲了
讲你的死循环问题
你没有给循环加一个限制条件
根据你continue的意思我暂时理解为
如果输入的不是数字
那么一直循环
重新输入
一直到你输入的是数字为止跳出循环
对吗?
while(1){
printf("请输入要查的值\n")
ret=scanf("%d",&n)
printf("ret=%d\n",ret)
if(ret==0){
printf("输入错误,请重新输入\n")
continue
}
break
}
这样就可以
如果输入的是数字
scanf的返回值为1
那么循环的第一次
不会进入if(ret==0)
也就是说
如果输入的是数字
直接执行break跳出循环
如果输入的不是数字
循环的时候执行语句if(ret==0)
然后执行continue
continue的意思是跳出当前循环继续下一次循环
即执行到continue之后从新循环而不会执行到break
以此类推
只要你输入的不是数字
则永远循环
输入的如果是数字
跳出循环
执行完毕。
大哥
如果小弟回答正常
给点分吧
多谢
=================================================================
另外对于一楼的同学
我必须有好的提醒你scanf()的用法以及返回值的相关问题
我想你肯定不知道
scanf("%d",&i)
如果你输入的是int型则返回1
否则返回0
换句话说即你输入的类型和scanf()里面预先定义的类型一致
则返回1
否则返回0
THANK
YOU