C语言 如何判断输入的是数字还是字符
程序如下,运行时如果输入了字母,程序就会跑飞,自己不停的循环,请问怎样才能判断出输入的是一串字母还是一个数,防止死循环?#definePI3.1415926#includ...
程序如下,运行时如果输入了字母,程序就会跑飞,自己不停的循环,请问怎样才能判断出输入的是一串字母还是一个数,防止死循环?
#define PI 3.1415926
#include <stdio.h>
main()
{
double r,v;
printf("\n计算球的体积");
while(r!=0)
{
printf("\n请输入球体的半径(退出请输入0):");
scanf("%lf",&r);
if(r==0)break;
v=4/3*PI*r*r*r;
printf("\n球的半径为%lf,\t\t球的体积为%lf\n",r,v);
}
printf("\n\t\t程序结束!\n\n");
}
如果改成下面这样能防止,但是不能返回正确的错误信息,不知道是因为输入0退出的还是字母造成非法退出,最好能返回错误信息后程序继续运行等待输入半径,进行下一次计算。
#define PI 3.1415926
#include <stdio.h>
main()
{
double r,v;
printf("\n计算球的体积");
while(r!=0)
{ r=0;
printf("\n请输入球体的半径(退出请输入0):");
scanf("%lf",&r);
if(r==0)break;
v=4/3*PI*r*r*r;
printf("\n球的半径为%lf,\t\t球的体积为%lf\n",r,v);
}
printf("\n\t\t程序结束!\n\n");
} 展开
#define PI 3.1415926
#include <stdio.h>
main()
{
double r,v;
printf("\n计算球的体积");
while(r!=0)
{
printf("\n请输入球体的半径(退出请输入0):");
scanf("%lf",&r);
if(r==0)break;
v=4/3*PI*r*r*r;
printf("\n球的半径为%lf,\t\t球的体积为%lf\n",r,v);
}
printf("\n\t\t程序结束!\n\n");
}
如果改成下面这样能防止,但是不能返回正确的错误信息,不知道是因为输入0退出的还是字母造成非法退出,最好能返回错误信息后程序继续运行等待输入半径,进行下一次计算。
#define PI 3.1415926
#include <stdio.h>
main()
{
double r,v;
printf("\n计算球的体积");
while(r!=0)
{ r=0;
printf("\n请输入球体的半径(退出请输入0):");
scanf("%lf",&r);
if(r==0)break;
v=4/3*PI*r*r*r;
printf("\n球的半径为%lf,\t\t球的体积为%lf\n",r,v);
}
printf("\n\t\t程序结束!\n\n");
} 展开
13个回答
展开全部
你这个程序与“输入的是字符还是数字”没有关系。
关键是不能用double类型的r与0直接这样进行比较:r!=0
应该像下面这样写:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
关键是不能用double类型的r与0直接这样进行比较:r!=0
应该像下面这样写:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输入的时候比如scanf会有一个输入格式,如果不确定输入的是数字还是字符,那就暂且全部当做字符储存,存在数组里a[100]。
最后挨个判断字符的大小
应为字符在asiic排列是有归类和顺序的
比如a[0]>='0'并且a[0]<='9',那么就知道这个字符本身是个数字不是字母,就可以转化这样,b
=
a[0]-'0';这样b的值就是字符对应的数字。
如果a[0]>='a'并且a[0]<='z',那么就是大写字母;a[0]>='a'并且a[0]<='z',小写字母.具体可以百度一下asiic表
最后挨个判断字符的大小
应为字符在asiic排列是有归类和顺序的
比如a[0]>='0'并且a[0]<='9',那么就知道这个字符本身是个数字不是字母,就可以转化这样,b
=
a[0]-'0';这样b的值就是字符对应的数字。
如果a[0]>='a'并且a[0]<='z',那么就是大写字母;a[0]>='a'并且a[0]<='z',小写字母.具体可以百度一下asiic表
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是知道自己想要输入的是字符还是数字,对吧?
如果是这样,你就加一个标志符,用来判断输入的东西是不是你要的。
int flag;
flag = scanf("%d",&n);
if(flag==1)
printf("right\n");
else
printf("wrong\n");
flag = scanf("%d",&n); //送返成功读入的数据个数。输入字母,flag为0
如果是这样,你就加一个标志符,用来判断输入的东西是不是你要的。
int flag;
flag = scanf("%d",&n);
if(flag==1)
printf("right\n");
else
printf("wrong\n");
flag = scanf("%d",&n); //送返成功读入的数据个数。输入字母,flag为0
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你这个程序与“输入的是字符还是数字”没有关系。
关键是不能用double类型的r与0直接这样进行比较:r!=0
应该像下面这样写:
const
float
EPSINON
=
0.00001;
if
((x
>=
-
EPSINON)
&&
(x
<=
EPSINON)
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
关键是不能用double类型的r与0直接这样进行比较:r!=0
应该像下面这样写:
const
float
EPSINON
=
0.00001;
if
((x
>=
-
EPSINON)
&&
(x
<=
EPSINON)
不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询